본문 바로가기
코딩/SQL, Mysql

[Sql] key와 super key, 좋은 Primary key의 조건

by JuBro 2024. 4. 20.

데이터 테이블을 많이 다루면서 자주 나오는 KEY 라는 용어, 정확한 정의가 뭘까?

 

Super Key

우선, key의 상위 개념인 superkey에 대해 알아보자.

Super key라는 것은 중복 튜플이 나오지 않게 하는 attribute세트이다. 

 

⭐ 위 relation table의 예시를 보자면, superkey가 될 수 없는 것은(=중복된 튜플을 가지도록 하는 attribute 세트)

{B}, {D},{F},{D,F} 이다.

 

저 네 집합만 제외하고는, 모든 집합은 다 superkey가 될 수 있는 것이다. {A,B,C},{A,D},{C,D,F} .... 등등

 

 

⭐ 이제 Key 라는 것은, 이렇게 superkey의 집합들 중에서 최소성을 만족하는 것이다. 

여기서 말하는 '최소성' 이란, 집합에서 하나씩 제외할 때, 각 튜플을 판단하는 키로써의 역할을 잃지 않을 최소단위이다.

예를 들어 위의 super key의 예시에서 {C,D,F}에서 C를 지워버린다면, {D,F}가 되어 튜플을 판별하는 키의 역할을 할 수 없어지게 된다.

➡️key가 최소성을 만족하는지 확인하려면 그 부분집합 중에 superkey가 될 수 있는 것이 또 있는지 확인하면 된다.

EX) superkey {C,D,F}에서도 보면, {C,D}, {C,F}등도 슈퍼키가 될 수 있기에 key가 아니다. 

 

⭐ 위 예시에서 key가 될 수 있는 것은 

{A},{C},{E},{B,F} 이다.

 

참고로 위와 같은 key의 후보들을 Candidiate Key라고 하고, 그중 주인공이 될 키(내가 쓸 키) 를 우리가 앞으로 수두룩하게 사용할 Primary Key라고 부른다. 

 

Key⊂SuperKey 이기 때문에, 모든 키는 슈퍼키이나 그 역은 성립하지 않는다. 

 

 

좋은 Primary key의 조건

 

Stable 바뀌지 않아야 한다.
Definitive 항상 존재해야 한다. (NULL 경우의 수 최소화)
Numeric 가급적 숫자 정보!
Minimal attribute가 적을수록 좋다(3개 이하)
Short 짧아야 한다.
Security 민감한 정보는 좀...(ex - 주민번호)