by 김도진 Primary Key Unique key PK UK [2014.07.29 07:38:14]
안녕하세요. 테이블 설계시 KEY 구조 때문에 문의드립니다.
기존에 DB 설계시 PK를 집합키로 하고 UNIQUE는 사용한적이 없었는데 테이블에 PK는 유일해야 되며
성능이라던지 추후 키 변경시 영향도가 많아서 아래와 같이 구조를 잡으려고 합니다.
사실 예전 이런 구조로 DB설계자랑 논쟁한적있었는데 그분은 PK를 모두 집합키로 사용하고 자식에서 모두 상속받는 구조를 선호 했습니다. 일단 질문은 상속시 해당 PK만 자식에서 UK로 상속받고 부모데이터가 필요할땐 항상 조인하려고 합니다.
혹 이런 구조에서 문제가 될 만한 부분이 있을까요?
USER_INFO(사용자정보 테이블)
컬럼 | KEY | 설명 |
UI_IDX | PK | IDX |
UI_USER_ID | UK | 사용자ID |
UI_USER_NAME | - | 사용자명 |
DEPART_INFO (부서정보테이블)
컬럼 | KEY | 설명 |
DI_IDX | PK | IDX |
DI_DEPART_CODE | UK | 부서코드 |
DI_DEPART_NAME | - | 부서명 |
WORK_DEPART_INFO (근무부서정보테이블)
컬럼 | KEY | 설명 |
WD_IDX | PK | IDX |
UI_IDX | UK | USER_INFO.IDX |
DI_IDX | UK | DEPART_INFO.IDX |
마농님 질문의 바꿔서 다시 문의 드리겠습니다.
위의 샘플에 부모키가 하나라서 UK대신 PK로 하라는 말씀 알겠습니다.
사실 위와 같이 한 이유는 사용자ID를 바꿔 달라고 하는경우 연결된 모든 테이블에 값을 바꾸거나 지워야 하는 문제 때문에 위와 같이 잡아 보려고 했습니다.
그리고 만약 부모테이블에 집합키가 여러개가 필요할 경우 때문에 인조식별자 잡고 집합키를 유니크로 잡으려고 했습니다. PK가 하나지만 가급적이면 동일한 구조로 가려고 했었거든요.
일단 내용을 바꿔서 테이블 모양을 잡자면 아래 처럼 될것 같은데... 부서테이블에 PK가 여러개 필요할 경우 인조키 만들고 유니크로 가야 되나요? 아님 그냥 PK를 아래 처럼 해도 될까요?
UI_USER_ID | PK | 사용자ID |
UI_USER_NAME | - | 사용자이름 |
속성... | - | 속성... |
DI_DEPART_CODE | PK | 부서코드 |
DI_GUBUN_KEY | PK | 특정구분키 |
DI_DEPART_NAME | - | 부서명 |
속성... | - | 속성... |
UI_USER_ID | PK | 사용자ID |
DI_DEPART_CODE | PK | 부서코드 |
DI_GUBUN_KEY | PK | 특정구분키 |
속성... | - | 속성... |
== 인조 식별자 ==
○ 사용 조건
- 후보 식별자 중 주 식별자로 선정할 만 한 게 없을 때
- 후보 식별자 속성 조합이 지나치게 복잡할 때
- 실체/자립 엔티티에서 사용
○ 주로 "~코드" / "~번호" 등의 무의미한 번호가 사용됨
- ~코드 라는 명은 공통코드 속성과 혼동되므로 권장하지 않음
○ 인조 식별자 고려 단계
- 주요 엔티티는 개념모델 단계에서
- 일반 엔티티는 논리모델 단계에서
○ 인조 식별자 사용 시 장점은
- 모델이나 SQL 이 간단해 지는것
○ 인조 식별자 사용 시 단점은
- 인스턴스 생성 기준을 인조(주) 식별자만으로 판단하기 어렵다
- 실제 업무 식별자에 유니크 인덱스를 사용하여 추가 키 관리를 해야 한다
- 모델만 보고 업무를 이해하기 어렵다
- 특히 행위 엔티티에 인조 식별자 사용 시 가독성이 많이 저하된다
○ 참조 : http://wiki.gurubee.net/pages/viewpage.action?pageId=28115827
== 주 식별자로 인조 식별자 선택 시 특성 및 주의사항 ==
○ 데이터를 일반화 할 수록 인조 식별자를 사용하게 되는 경향이 있다
- 인조 식별자는 확장성이 좋으므로 통합(일반화) 모델 엔티티에서 자주 사용된다
- 실체/자립 엔티티에서도 인조 식별자가 주로 사용된다
○ 업무 식별자(후보 식별자)는 대체 식별자가 되므로 반드시 유니크 인덱스를 생성해야 한다
- 인스턴스 중복을 방지 목적
- 데이터 발생의 기준이 되는 업무 식별자는 특히 유니크 인덱스 설정이 필수적이다
○ 참조 : http://wiki.gurubee.net/pages/viewpage.action?pageId=28115841