님.. 테이블을 만들고 PK를 선정하고 Attribute를 성급히 만드시기 전에 먼저 구현하려는 대상의 성질부터 먼저 파악하셔야 겠습니다.
제가 님의 글을 보고 이해한 바로는 주소록 프로그램을 만드는데 주소록은 개인의 인적정보를 저장하는데 개인적으로 또는 그룹별로 개인의 주소록을 출력을 할 수 있도록 결과를 내고 싶은거죠...?
한명의 사람은 여러 그룹에 소속될 수 있으므로 우선 생각해 볼 수 있는것은 개인:그룹의 관계참여는 1:M형식이 될것입니다.
한 그룹은 여러 개인을 소속할 수 있으므로 그룹:개인의 관계참여는 1:M관계의 테이블이 나옵니다.
고로 개인과 그룹테이블의 관계참여는 M:N이 됩니다.
M:N관계의 해소를 위해서 "그룹명단"이라는 테이블을 하나 만드는데 이 테이블은 복합키를 가집니다. 복합키의 구성요소는 개인테이블의 주키와 그룹테이블의 주키로 이루어 져 있습니다.
이렇게 3개의 테이블을 만들면 M:N관계가 1:M관계로 해소시켜 주고 원하는 조건을 만족하는 데이터 구조를 쉽게 만드실 수 있을껍니다.
주키와 외래키를 모두 정하셨으면 주키에 종속되는 Attribute를 잘 판단하시어 테이블에 적절히 넣어 주시면 됩니다. 가력 그룹명에 해당하는 놈은 그룹 테이블에 개인 전자우편은 당연히 개인 테이블로 설정되어 지겠죠. "그룹명단"에 해당하는 테이블의 Attribute는 가입일자, 그룹직분등이 올 수 있겠지요..
-- 서준원 님이 쓰신 글:
>> 안녕하세요. 밑에 질문드린 서준원이라고 합니다.
>> 먼저 최공훈님꼐 감사드리며..
>>
>> 다름이 아니라 이번에 주소록 프로그램을 하나 만드는데
>> 구현할 기능은 개인주소록 / 그룹주소록 입니다.
>>
>> 다음과 같이 기초적인 스키마는 만들어 놨습니다.
>> 필드명은 대충 보시면 짐작하실 수 있습니다.
>> id 라는 필드는 주소록을 소유자의 ID를 뜻합니다.
>>
>> 1. 개인주소록 테이블
>>
>> CREATE TABLE individualdirectory (
>> id varchar(32) NOT NULL,
>> email varchar(32) NOT NULL,
>> name varchar(32) NOT NULL,
>> cellular varchar(20) default NULL,
>> phone varchar(20) default NULL,
>> company varchar(32) default NULL,
>> memo text,
>> PRIMARY KEY (id,email)
>> );
>>
>> 2. 그룹주소록 정보 테이블
>>
>> CREATE TABLE groupdirectoryinfo (
>> id varchar(32) NOT NULL,
>> name varchar(32) NOT NULL,
>> explanation varchar(255),
>> PRIMARY KEY (id,name)
>> );
>>
>> 이렇게 두개의 테이블은 만들었는데
>> 이 두 테이블을 토대로
>> 그룹주소록을 만들어야 합니다.
>>
>> 제가 나름대로 생각해본결과
>>
>> 3. 그룹주소록
>>
>> CREATE TABLE groupdirectory (
>> id varchar(32) NOT NULL,
>> email varchar(60) NOT NULL,
>> name varchar(30) NOT NULL,
>> );
>>
>> 이러게 만들었습니다.
>> 즉 어떤 사용자(id)의 개인주소록에 있는 개인주소(email)는
>> 어떤 그룹주소록( name)에 속한다.
>> 입니다.
>>
>> 저같은 경우는 개인주소록이 unique number 를 쓰지 않고
>> PK로 (id,email) 로 묶었거든요...
>> unique number 같은걸로 쓰면 DB양을 더 줄일수 있을것 같기도
>> 한데...
>>
>> 아뭏든
>> 고수님들은 어덯게 만드실지 조언좀 부탁드립니다.
|