데이터 모델링관련 질문이 있습니다. 스스로 공부하고자 간단한 테이블 설계를 진행하고 있는데
해당 모델링에서 직원 테이블의 [부서번호]와 [팀번호]는 부서테이블과 팀테이블에서 참조하는 게 당연하다고 생각되는데
부서테이블의 [부서장] 속성과 팀 테이블의 [팀장] 속성을 직원테이블의 [직원 번호]로 참조하는게 맞는지 궁금합니다.
FOREIGN KEY를 양쪽으로 설정하는 게 가능한지 궁금합니다.
저렇게 양쪽에서 참조하는 경우에는 식별관계를 어떻게 표시해야 하는지도 알고싶습니다!
[부서] 와 [직원] 2개 엔티티 관계에서 FK 양방향 설정
- FK 양방향 설정은 불가능합니다. < 물리적으로 양쪽 테이블을 상호 참조하는 것이 안 됨 >
- 이런 경우 보통은,, 아래 처럼 또 다른 엔티티를 생성해서 1:N 관계로 분리 합니다.
ex) [부서] 는 {부서번호} PK, {부서이름}, {부서장사번}
[직원] 는 {직원번호} PK, {직원명}, {성별}, {직급코드} + ~~~
[부서직원] 는 {부서번호} PK/FK + {직원번호} PK/FK + ~~~~~
- {팀} 과 [직원] 엔티티 관계도 동일합니다.
- 각 [엔티티] 는 고유한 {속성} 만 가져야 하고, [관계/릴레이션] 도 {속성} 이 됩니다.
추가로.. [부서] 의 {부서장(직원 번호)} 이 Not NULL 이네요, 이렇게 설계하면 부서장이 공석인 경우 처리가 어렵습니다. 업무처리를 고려해 Null 허용하는 것도 방법 입니다. 편법으로 공석 등을 표현할 사번을 임의로 만들어 코드 처럼 사용할 수 있지만 좋은 설계는 아닐 것 같습니다.
논리 모델링을 할 때 기본룰이 있는 것 같습니다. 보통은 DA 가 표준을 정해서 공지하게 되는데....
표준단어, 표준도메인, 표준용어 등을 알아 보시는 것도 좋을 것 같습니다.
[부서] 를 살펴보면
- {부서 번호} ~~> {부서번호} := 한글 속성은 붙여 쓰는 게 맞을 것 같습니다. 공백 없이 붙임
- {DEPTNO} ~~> {DEPT_NO} := 영문 속성명은 표준 단어 조합으로 "_"로 복합 기재가 맞을 것 같습니다.
- {부서이름} ~~> {부서명} := 이름, 명 등 유사어를 1개로 통일할 텐데,,, "명" 이 일반적 입니다.
- {DEPTNAME} ~~> {DEPT_NM} := 일반적 표현
- {부서장(직원 번호)} ~~> {부서장사번} := 일반적 표현
- {EMPNO} ~~> {DEPTCF_EMPNO} := 이렇게도 표현
세심한 부분까지 신경써주셔서 감사드립니다!!
정말 많은 도움이 됐습니다!