티스토리 뷰

개발 업무를 하려면 필수적으로 ERD를 보게 되는데, 그냥 어렴풋이 넘겨짚었던 개념을 이제서야 정리한다.

 

DB테이블의 Properties 또는 ERD를 보면 아래 예제처럼 2개 이상의 칼럼이 Primary Key로 지정된 테이블을 볼 수 있다.

복합키정보공학 표기법 ERD

지금까지 대강 느낌적으로 잘 사용해서 다행이었지만, 하나의 테이블에 어떻게 기본키가 여러 개 존재할 수 있지?라는 의문을 마음 한구석에 쌓아 두고 있었다. 그래서 확인해본 결과 "테이블은 오직 하나의 기본키(PK)를 가질 수 있다"라는 것은 정확한 정의라는 것을 확인했다. 근데 여기서 포인트는 PK를 오직 하나의 컬럼으로만 설정할 수 있다는 것으로 잘못 해석하면 안 된다라는 점이다. 나는 이 부분을 잘못 이해하고 있었다.

 

다시 말해, 위 테이블에서 PK로 설정된 "PRODUCT_GROUP_CD", "PRODUCT_CATEGORY_CD" 두 칼럼은 각각의 칼럼이 Unique하게 중복되면 안 되는 것이 아니라, 두 칼럼을 합쳐서 봤을 때 중복이 아니라면 무결성의 원칙을 지키는 것이다.

예) PK의 속성으로 A와 B라는 두 칼럼이 있다면 [ A = 1, B = 1 ] , [ A = 1, B = 2 ] 는 중복된 것이 아니다.

 

 

즉, 정확히는 복합키(Composite Key)를 만드는 것이지 기본키(PK)가 복수라는 것은 잘못된 표현이다. 따라서 다음 SQL문에서도 에러가 발생한다.

기본키 중복 에러

위에서 말했다시피, 테이블에 PK를 복수로 생성할 수 없다. 그렇다면 기본키를 구성하는 칼럼을 복수로 설정하기 위해서는 어떻게 해야 할까?

 

기본키 제약조건

위 SQL문과같이 Primary Key 제약조건으로 속성들을 괄호안에 설정해주면 된다.

정리하자면 "기본키를 구성하는 칼럼은 복수일 수 있지만, 기본키가 복수일 수는 없다" 이것만 생각하면 된다.

 

.

.

.

이 부분은 두 테이블 간의 '식별자와 비식별자 관계' 이론과도 연결되는 개념인데, 실무에서 당황하지 않고 적용시킬 수 있도록 다시 제대로 볼 필요가 있음을 느낀다.

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함