면접 질문에서도 나왔고 공부할 겸해서
말로 잘 나올 정도로 습관적으로 개념을 정리해볼 필요가 있다고 생각해서
이렇게 포스팅해요
일단 PK(Primary Key)나 FK(Foreign Key)는 좀 이따가 살펴보고
Key라는 것은 어떤 것일까요??
Key 어떤 특성을 가지고 있는 속성(Attribute)입니다.
그럼 그 '어떤 특성'이라는 것은 무엇일까요??
그것은 Key의 종류에 따라 달라집니다. 각 튜플들을 식별해주거나, 다른 테이블과의 연관성을 나타내기도 합니다
그럼 Key들의 종류를 살펴보겠습니다!!
Candidate Key : 후보키
후보키를 먼저 개념을 잡고 가셔야 기본키를 이해하시기 편합니다.
왜냐하면 기본키는 후보키 중에 고르는 것이기 때문이에요.
일단 후보키의 가장 중요한 특징은 '유일성'과 '최소성'입니다.
유일성은 하나의 속성 값(Key 값)이 하나의 유일한 튜플을 식별할 수 있어야 한다는 것입니다.
예를 들면 대표적으로 '주민등록번호', '사원증 번호', '학번' 등이 있습니다.
이 속성들을 보면 모든 사람들을 구분하기 위한 속성이라는 것을 알 수 있습니다.
주민등록번호가 같은 사람은 없고, 한 사람에게 하나씩만 부여되는 속성입니다.
그러니 모든 튜플들을 구분할 수 있어야 한다는 조건이 성립됩니다.
그리고 최소성은 키를 구성하는 속성들을 최소화해야 한다는 것입니다.
아래 테이블을 먼저 보시면
이 테이블의 속성은 '주민번호', '이름', '전화번호', '출생지'로 구성되어있습니다.
이 테이블에서 한 튜플을 유일하게 구분해주는 속성들의 집합은
'주민번호' 하나일 수도 있고, '이름'과 '주민번호' 두 개의 집합일 수도 있습니다.
즉 '주민번호' 속성만 Key에 포함한다면 그 Key는 유일성이 보장된 Key입니다.
하지만 최소성을 위해 '주민번호'만을 가지고 후보키로 사용을 하는 것입니다.
이 테이블에서는 '이름' 속성도 후보키가 될 수 있겠네요.
-> 이 사실을 머릿속에 넣고 다음 PK로 넘어가 봅시다
PK(Primary Key) : 기본키
PK는 기본키라고도 불립니다. 이 키의 중요한 특성은 3가지입니다.
- 중복된 값을 가질 수 없다.
- NOT NULL 이어야 한다.
- 후보키 중에 개발자가 선택한 키이다.
'중복된 값을 가질 수 없다'라는 조건은 후보키의 유일성을 생각하시면 됩니다.
그리고 'NOT NULL 이어야 한다'는 것은 PK의 데이터가 비어있으면 안 된다는 것입니다.
우리나라 사람들 중 출생신고를 했다면 주민등록번호가 없는 사람은 없잖아요?
그렇게 생각하시면 됩니다.
그리고 '후보키 중 개발자가 선택한 키'라는 것은 아까 제가 머릿속에 넣으라고 했던
'이름'이라는 속성을 생각해봅시다
(보기 불편하실 테니 같은 테이블을 또 띄어드릴게요)
위에 있던 테이블과 같은 테이블입니다.
이 테이블에서만 보면 '주민번호'도 튜플을 구분해주고, '이름'도 튜플을 구분해줍니다.
(이름은 동명이인이 있을 수 있지만 일단 이 테이블에서만 보면 구분이 가능합니다)
그럼 이 테이블 내에서는 '주민번호'와 '이름'이 후보키로 선정이 됩니다.
(전화번호는 NULL이 있으니 후보키에 포함은 되지만 PK의 가능성이 없으니 제외합니다)
이 중에 PK로 채택하는 것은 관리자 마음대로입니다.
관리자가 판단했을 때 어떤 것을 PK로 해야지 나중에 관리하기 편할지를 생각하고 선택하는 것입니다.
만약 제가 선택한다면 '이름' 속성은 동명이인이 있으니 절대 채택하지 않겠네요ㅋㅋㅋ
Alternate Key : 대체키
이 키는 별로 중요하지는 않지만 일단 설명을 해드린다면
아까 후보키 중에서 PK를 선택한다고 했잖아요??
그럼 PK로 선택받지 못한 후보키들이 있을 것입니다.
그것이 대체키입니다.
Super Key : 슈퍼키
슈퍼키도 쉽습니다. 아까 후보키 설명드릴 때 최소성에 대한 것만 생각하시면 됩니다.
즉 유일성은 만족하지만, 최소성은 만족시키지 못하는 속성들의 집합이라고 생각하시면 됩니다.
FK(Foreign Key) : 외래키
자, 이제 또 중요한 Key가 나옵니다.
이 FK는 다른 테이블의 PK를 가져와서 사용한다는 것이 기본적인 개념입니다.
이 두 테이블에는 '과목번호'라는 속성이 있습니다.
그리고 '과목번호'는 '과목' 테이블의 PK입니다.
이렇게 테이블은 서로 관계가 있어야 하고 그 관계를 가지기 위한 수단으로 FK를 사용합니다.
그리고 FK는 NULL값이 들어올 수 있습니다.
예를 들면 '수강' 테이블의 '과목번호'에는 NULL이 들어갈 수 있다는 것입니다.
하지만 '과목' 테이블에 없는 '과목번호'가
'수강' 테이블의 '과목번호'로 들어갈 수 없다는 것입니다.
('과목' 테이블에 없는 'DK345'이라는 과목이 '수강' 테이블의 '과목번호'로 들어갈 수 없다는 것)
이렇게 여러 가지 DB에서 사용하는 Key에 대해 설명을 드렸습니다.
쉽고, 잘 읽히게 설명됐는지 걱정이네요.
최대한 자세하게 설명을 드리려고 했는지만
혹시 질문이 있으시면 댓글로 남겨주시기 바랍니다.
감사합니다!!!
'학교 공부 > Database' 카테고리의 다른 글
반정규화란? (0) | 2021.03.29 |
---|---|
데이터베이스 정규화 (1NF, 2NF, 3NF, BCNF) (0) | 2021.03.11 |