코딩/하루 1 CS

[하루 1 CS] 데이터베이스 2 - 테이블의 키

codie0226 2026. 6. 13. 23:34
반응형

이번에는 관계형 데이터베이스(Relational Database)의 다양한 종류의 키(Key)와 그 역할, 의미에 대해 알아보겠다.

Key란?

관계형 데이터베이스에서 키는 매우 중요한 역할을 수행한다. 테이블 내부의 레코드들을 고유하게 식별하고, 다른 테이블과의 연관 관계를 맺는 기준이 되기 때문이다.

키는 기본적으로 데이터베이스 테이블의 요소인 속성(Attribute)으로 정의된다. 하나의 속성이 하나의 키가 될 수도 있고, 여러 속성의 쌍(Attribute Pair)이 하나의 키를 정의할 수도 있다. 키는 개념의 포함 관계와 목적에 따라 다음과 같이 분류된다.

  1. 슈퍼키 (Super Key)
  2. 후보키 (Candidate Key)
  3. 기본키 (Primary Key)
  4. 외래키 (Foreign Key)

이제 개념의 가장 큰 틀인 슈퍼키부터 차례대로 알아보겠다.


1. 슈퍼키 (Super Key)

슈퍼키는 테이블에서 레코드를 고유하게 식별할 수 있는 속성들의 집합이다. 즉, 데이터베이스의 '유일성(Uniqueness)'을 만족하는 가장 포괄적인 키이다.

예를 들어, 학생 테이블에 (학번, 이름, 학과, 전화번호)가 있다면 학번은 당연히 중복되지 않으므로 레코드를 구별할 수 있다. 따라서 (학번)은 슈퍼키이다.

뿐만 아니라 (학번, 이름), (학번, 학과), 심지어 (학번, 이름, 학과, 전화번호)처럼 학번을 포함한 어떤 속성의 조합이든 레코드를 고유하게 식별할 수만 있다면 모두 슈퍼키가 될 수 있다.

하지만 슈퍼키는 레코드를 구별하는 데 꼭 필요하지 않은 속성(예: 이름, 학과 등)까지 불필요하게 포함하고 있다는 단점이 있다.

2. 후보키 (Candidate Key)

후보키는 슈퍼키들 중에서 최소성(Minimality)을 만족하는 키를 의미한다. 즉, 레코드를 고유하게 식별하는 데 꼭 필요한 최소한의 속성들로만 구성된 필수적인 키다. 따라서 후보키는 '기본키가 될 수 있는 후보들'을 뜻하며, 논리적 설계 단계에서 찾아내게 된다.

아래 유저 테이블을 다시 살펴보자.

학번 이름 학과 전화번호
123456 코디 컴퓨터공학과 010-1234-5678
223344 레이 시각디자인과 010-9876-5432
567890 피아 인공지능학과 010-1111-2222

개념적으로 분석해 보면 다음과 같다.

  1. 이름은 동명이인이 존재할 수 있으므로 탈락이다.
  2. (이름, 학과) 조합 역시 우연히 같은 이름의 학생이 같은 학과에 들어올 수 있으므로 완전히 고유하다고 장담할 수 없다.
  3. 이 테이블에서 절대 중복되지 않는 최소한의 고유 값은 (학번)과 (전화번호)뿐이다.

따라서 이 테이블의 후보키는 (학번)과 (전화번호) 2개가 된다.

3. 기본키 (Primary Key)

기본키는 앞서 찾아낸 여러 후보키 중에서 설계자가 최종적으로 선택한 '대표 키'이다. 데이터베이스 레코드를 구분 짓는 가장 기본적인 역할을 수행하며, 다음과 같은 특징을 가진다.

  • Null(빈 값)을 가질 수 없다.
  • 중복된 값을 가질 수 없다.
  • 값이 자주 변경되지 않는 불변성을 지녀야 한다.

그렇다면 위 예시에서 후보키였던 (학번)과 (전화번호) 중, 왜 전화번호는 기본키로 잘 쓰이지 않을까? 가장 큰 이유는 변동 가능성 때문이다. 학번은 한 번 발급되면 변하지 않지만, 전화번호는 사용자가 언제든 바꿀 수 있는 값이다. 또한 사람에 따라 전화번호를 등록하지 않는(Null) 경우가 생길 수도 있다. 게다가 전화번호는 민감한 개인정보이므로 시스템 식별자로 자주 노출되는 것보다 학번 같은 일련번호를 기본키로 사용하는 것이 보안과 성능 측면 모두에서 유리하다.

추가적으로 기본키는 별도의 설정을 하지 않아도 DBMS 내에서 자동으로 인덱스(Index)로 지정된다. 덕분에 기본키를 기준으로 검색과 삽입 연산이 매우 빠르게 이루어지게 된다.

4. 외래키 (Foreign Key)

외래키는 테이블과 테이블을 이어주는 연결고리 역할을 하는 키이다. 관계형 데이터베이스에서는 여러 테이블이 서로 연관되어 있는 경우가 많다.

학번 (PK) 이름 학과 전화번호
123456 코디 컴퓨터공학과 010-1234-5678
223344 레이 시각디자인과 010-9876-5432
학번 (FK) 담당교수
123456 철수
223344 영희

위 구조에서 '학생 정보 테이블'과 '담당교수 테이블'을 이어주는 매개체가 바로 두 테이블에 공통으로 존재하는 (학번) 속성이다. 이때 담당교수 테이블의 (학번)은 학생 테이블의 기본키를 참조하고 있으므로 외래키(FK)가 된다.

외래키는 데이터의 중복을 방지하고 데이터 무결성 (Data Integrity)을 유지하기 위해 필수적이다. 만약 '코디' 학생이 졸업하여 학생 테이블에서 학번(123456)이 삭제되었는데, 담당교수 테이블에는 학번이 그대로 남아있다면 데이터의 결손(유령 데이터)이 발생하여 시스템에 치명적인 오류를 야기할 수 있다.

외래키 제약 조건

이러한 데이터 결손을 방지하기 위해 외래키에는 함부로 원본 데이터를 변경하거나 삭제할 수 없도록 제약 조건(Constraint)을 걸 수 있다.

  1. Strict (제한/거부): 다른 테이블에서 참조하고 있는 원본 레코드는 아예 변경하거나 삭제할 수 없도록 막는다.
  2. CASCADE (연쇄 반영): 원본 테이블의 레코드를 변경하거나 삭제하면, 이를 참조하고 있는 다른 테이블의 레코드도 똑같이 자동으로 변경되거나 삭제된다.

이러한 제약 조건은 서비스의 특징에 맞게 DELETE나 UPDATE 연산 시 어떻게 작동할지 미리 꼼꼼하게 설계해야 한다.

반응형