💡 핵심 인사이트
데이터베이스 테이블에는 수많은 데이터(행, 튜플)가 존재합니다. 이 중에서 **'홍길동'이라는 특정 데이터 한 줄을 남들과 헷갈리지 않고 정확히 콕 집어낼 수 있게(식별) 해주는 핵심 열(컬럼)**을 **키(Key)**라고 부릅니다.
키가 되기 위해서는 **유일성(Uniqueness)**과 **최소성(Minimality)**이라는 두 가지 엄격한 자격 증명을 거쳐야 합니다.


Ⅰ. 키(Key)의 존재 이유

동명이인이 3명 있는 교실에서 선생님이 "김철수 나와!"라고 하면 세 명이 동시에 일어납니다(데이터 식별 실패). 하지만 "학번이 2023001인 학생 나와!"라고 하면 오직 단 한 명만 일어납니다. 여기서 '학번' 컬럼이 바로 데이터베이스가 수백만 건의 데이터를 헷갈리지 않고 정확히 찾아내는 식별자, 즉 키(Key) 역할을 하는 것입니다.


Ⅱ. 키의 2대 필수 성질 (자격 요건)

아무 컬럼이나 다 키가 될 수 있는 것은 아닙니다. 후보자가 되기 위한 수학적 성질입니다. (★정보처리기사 최고 빈출)

1. 유일성 (Uniqueness, 유일하게 구별할 수 있는가?)

  • 정의: 특정 키 값으로 테이블 내의 튜플(행)을 조회했을 때, 절대 2개 이상의 행이 나오면 안 되고 오직 단 1개의 행만 식별되어야 한다는 성질입니다.
  • 만족하는 예:
    • 주민번호 (O) : 800101-1234567을 치면 무조건 1명만 나옴.
    • 학번 (O) : 같은 학번은 학교에 존재할 수 없음.
    • 이름 + 나이 (O) : 이름이 '홍길동'이면서 나이가 '20살'인 사람은 1명일 확률이 큼. (복합 속성)
  • 위반하는 예:
    • 이름 (X) : '김철수'를 치면 3명이 나옴 (유일성 위배).
    • 성별 (X) : '남'을 치면 수천 명이 나옴.

2. 최소성 (Minimality, 군더더기 없이 깔끔한가?)

  • 정의: 유일성을 만족하는 키들 중에서, **더 이상 속성(열)을 빼버리면 유일성이 깨져버리는 '가장 필수적인 최소한의 속성 조합'**으로만 이루어져야 한다는 성질입니다. 쓸데없는 잉여 정보가 붙어있으면 안 됩니다.
  • 만족하는 예:
    • 학번 (O): 학번 자체로 1명을 찾을 수 있으며, 여기서 속성을 더 뺄 것도 없음 (최소성 만족).
  • 위반하는 예:
    • 학번 + 성별 (X): 이 두 개를 합쳐서 조회해도 유일하게 1명을 찾을 수 있습니다(유일성 만족). 하지만 식별하는 데 굳이 성별은 없어도 학번만으로 충분합니다. 즉 성별이라는 군더더기가 붙어 있으므로 최소성 위배입니다.

Ⅲ. 키의 진화 과정 (다음 장 예고)

이 두 가지 성질을 얼마나 만족하느냐에 따라 키의 계급이 나뉩니다.

  • 슈퍼 키 (Super Key): 유일성만 만족하면 다 받아주는 널널한 그룹. (예: 학번+성별)
  • 후보 키 (Candidate Key): 슈퍼 키 중에서 군더더기를 다 쳐내고 최소성까지 완벽히 만족한 정예 멤버들. (예: 학번, 주민번호)
  • 기본 키 (Primary Key): 후보 키들 중에서 설계자가 "이게 우리 테이블의 짱이다!"라고 최종 선택한 단 하나의 황제 키.

📢 섹션 요약 비유: 유일성(Uniqueness)은 **"범인을 지목했을 때 무조건 단 한 명만 검거되어야 한다"**는 조건이고, 최소성(Minimality)은 **"범인을 특정할 때 굳이 필요 없는 인상착의는 빼고 가장 확실한 점 1~2개만 말해라"**는 조건입니다. "안경을 쓴, 키 180의, 주민번호 900101인 사람"은 유일하지만 최소성이 없습니다. "주민번호 900101인 사람"이 유일성과 최소성을 모두 갖춘 완벽한 지목입니다.