부모자식관계 DB설계 0 2 9,853

by 양희종 [DB 모델링/설계] 모델링 부모 자식 엔티티 [2012.04.26 16:25:53]


안녕하세요. 부모와 자식 관계의 테이블 모델링 할때(오라클11G)

부모테이블
# 부모KEY(PK)

자식테이블
#부모KEY (PK)
#자식SEQ (PK)


로 구성하는 것이 맞는지 아니면 아래와 같이

부모테이블
#부모KEY(PK)

자식테이블
#자식KEY(PK)
부모KEY(FK)

처럼 하는 것이 맞는지?
재가 생각했을땐 전자가 맞을 듯한데 이에 대한 포퍼먼스 차이나, 문제점을 딱히 설명 하지 못하겠네요.
무엇이 잘못되었다는것을..고수님들 의견 부탁드립니다. 전자가 맞다면 왜? 또 후자가 맞다면 왜?
전문지식으로 알려주세요.. ^^ 감사합니다.
by 손님 [2012.04.26 17:49:22]

먼저 결론을 말씀드린다면 모델링에는 정답이 없다라는 것입니다. 수학처럼 누구나 공감할 수 있는 정답이나 누구나 틀리다고 할 수 있는 오답이 없습니다. 상황에 따라서 유리한 것과 불리한 것이 있을 뿐이죠.

부모-자식간의 모델링을 하면서 부모키가 자식의  PK가 되는 식별자관계로 만들것이냐
부모키가 그냥 일반칼럼이 되는 비식별자관계로 만들것이냐의 문제인데요 이 역시 똑부러진 답은 없습니다.

1)식별자관계로 설정할 경우

장점 :
부모 자식간의 관계가 확실히 드러나며 [부모없이 자식없다] 즉, 부모 데이타는 없는데 자식데이타가 만들어지는 사태를 방지하여 데이타 정합성을 맞출 수 있습니다. 왜? PK 칼럼은 NULL이 될 수 없고 부모테이블에는 없는 값이 자식테이블에 들어올 수 없기때문에...

단점 :
자식칼럼만으로 유일성을 보장할 수 있는 경우, 부모칼럼이 PK의 구성요서가 됨으로써 PK는 최소의 칼럼만으로 구성해야 하는 최소한의 원칙에 위배될 수 있습니다 . 만일 부모-자식관계가 1단계가 아닌 손자,증손자...이런식으로 계속 연결될 경우 맨 마지막 테이블은 모든 조상에게 물려받은 칼럼이 PK가 되어  복잡해지는 단점이 발생합니다. 테이블의 데이타가 대량이라면 인덱스를 엑세스하는데 그만큼 비효율이 발생하겠지요.

2)비식별자로 설정하는 경우

장점 :
자신의 칼럼만으로 PK를 구성하였기에 인덱스가 단순해집니다. 부모-자식관계가 손자,증손자로 계속 이어질 경우 맨 하위 테이블의 PK가 복잡해지는 상황을 피할 수 있습니다.

단점 : 
부모로 부터 받은 칼럼이 NULL 허용이라면 부모없는 자식이 생겨 데이타 정합성에 깨질 위험이 있습니다. 그리고 부모의 키가 일반칼럼이기 때문에 자식테이블의 본래의 PK가 무엇인지 확인하기 어렵습니다. 즉, 두개의 테이블이 부모-자식간의 관계인지 단순 참조관계인지 확인하기가 힘듭니다.

부서테이블과 사원테이블이 있으며 사원테이블에는 소속부서를 의미하는 부서코드가 FK로 있습니다. 이 둘의 관계는 부모-자식간 일까요 아님 단순참조관계일까요?
게시판과 첨부파일 테이블이 있으며 첨부파일에는 소속글을 의미하는 게시물ID가 FK로 있습니다. 이 둘의 관계는 부모-자식간 일까요 아님 단순참조관계일까요?

첫번째의 경우, 소속이 없는 사원이 있거나 (발령대기 상태), 현재 존재하지 않은 부서에 속하는 사원이 있을 수 있으므로(퇴직사원인데 그가 속했던 부서가 없어진 경우) 단순참조관계이며
두번째의 경우, 게시판에 글을 등록하지 않은 상태에서 첨부파일만 등록할 수 없으므로 부모-자식관계입니다.

두 경우의 상황은 전혀 다르지만 겉으로 드러난 모양은 똑같아서 파악하기 힘듭니다. 단순한 예를 들어서 쉽게 파악될지 모르겠지만 복잡한 업무 모델링을 하면 부모칼럼이 자식의 일반칼럼인 경우 이게 부모자식관계인지 단순참조관계인지 파악하기가 힘듭니다. 

by 양희종 [2012.04.26 19:16:23]

감사합니다. ^^

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입