본문 바로가기
  • 시 쓰는 개발자
1일 1개념정리 (24년 8월~12월)/데이터베이스

1일1개 (43) - DB key

by poetDeveloper 2024. 9. 27.

1일 1개념정리 24.08.09.금 ~ 

 

큰 결정에 큰 동기가 따르지 않을 때도 있다. 하지만 큰 결심이 따라야 이뤄낼 수 있다.

무조건 무조건 1일 1개의 개념 정리하기 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!


#43. DB key

데이터베이스에서는 여러 키들이 있다. 기본키, 외래키 같은 용어를 들어봤을 것이다. 여기서 말하는 key는 테이블에서 레코드를 식별할 수 있는 속성을 이야기한다. 예를 들면 주민번호, 학번 등이 될 수 있겠다. 오늘은 이 키들을 분류하고 각각 언제 사용되는 것인지 알아보자.

 

key의 종류

앞서 말했듯, 키는 DB에서 레코드를 식별하는 속성을 말한다. 그런데 이 key는 종류도 다양하고, 성격도 다르다. 어떤 성격을 가진 key가 있는지 알아보자.

 

0. Super Key (슈퍼 키)

슈퍼 키는 테이블에서 행을 고유하게 식별할 수 있는 모든 속성 집합이다. 즉, 하나 이상의 속성으로 구성된 키로 각 행을 식별함.

  • 슈퍼 키는 중복 허용 안함.
  • 모든 기본 키와 후보 키는 슈퍼 키의 부분 집합이다. 하지만 슈퍼 키는 최소성이 보장되지 않기 때문에, 불필요한 속성을 포함할 수 있다.
  • 예를 들어, 학생 ID와 이름, 주민등록번호를 모두 포함하는 속성 집합은 슈퍼 키가 될 수 있지만, 학생 ID만으로도 고유하게 식별할 수 있다면 학생 ID가 후보 키가 된다.

1. Primary Key (기본 키)

기본 키는 테이블에서 각 레코드를 고유하게 식별하는 데 사용되는 키이다. PK라고 자주 쓰는데, 다음과 같은 특징이 있다.

  • 각 테이블은 하나의 pk만 가질 수 있다. 근데 여기서 말하는 1개의 pk는 단일 열 일수도 있고, 여러 열을 합친 복합 열일 수도 있다. 즉, 여러 열들을 합쳤더니 사람들을 식별할 수 있다 라고 한다면 그 열들의 집합도 기본키가 될 수 있다.
  • 기본 키로 설정된 열은 NULL을 가질 수 없다. (NotNull)
  • 중복값 안되고, 고윳값이어야한다.

→ 테이블의 무결성 보장하고, 다른 테이블과의 관계 정의시 사용된다.

 

2. Foreign Key (외래 키)

외래 키는 다른 테이블의 "기본 키를 참조"하는 열이다. 바로 위에서 언급했다. 다른테이블과 관계 정의시 사용된다고 했는데, 바로 외래키로써 참조하는 것이다. A테이블이 B테이블의 기본키를 참조하고 있다면 A테이블은 외래키로써 B테이블의 PK를 가지고 있는 것이다. 외래키는 다음과 같은 특징이 있다.

  • 외래 키는 참조 무결성을 유지하는 데 사용된다. 참조 무결성은 외래 키가 참조하는 테이블에 존재하지 않는 값을 가질 수 없게 한다. // 뭔소리냐면, 내가 B테이블을 식별하려고 B테이블의 속성 하나를 들고있는데, 이 값이 유효하지 않은 값이라면 ? 매번 유효성 검증을 해야하거나, 오류가 나거나 이럴 수 있다. 그니까 유효한 값만을 참조하기 위해서는 항상 값이 들어있는 값을 참조하면 되는 것이고, 그것이 바로 PK인것이다.
  • 외래 키는 중복을 허용할 수 있고, NULL 값을 가질 수도 있다. ▶ 외래키가 NULL이란 소리는, 참조하는 테이블이 없다는 뜻이지, 참조하는 PK가 NULL이라는 소리가 아니다. 애당초 PK는 not null 속성이니까 !!!

→ 그래서 두 테이블 간의 관계를 정의할 때 사용한다. 예를 들어, orders 테이블에서 고객 정보를 참조할 때 customer_id를 외래 키로 사용하여 customers 테이블의 기본 키와 연결한다.

 

3. Candidate Key (후보 키)

후보 키는 테이블에서 행을 고유하게 식별할 수 있는 "모든 키 후보들"이다. 즉, 기본키가 될 수 있는 집합이 후보키이다. 후보키 중에서 하나를 선택해 PK로 사용하는 것이다.

  • 후보 키는 기본 키가 될 수 있는 모든 키이다.
  • 기본키가 될 수 있는 후보자들이니까, 기본키 속성처럼 Not null이고, 중복을 허용하지 않는다.

→ 후보 키는 기본 키로써 사용될 수 있고, "기본 키가 아닌 후보 키"는 후술하는 "대체키"라고 한다. 대체키는 추가적으로 고유성을 보장할 때 사용될 수 있다.

ex) 기본 키 외에 고유성이 보장되는 다른 열이 있을 경우, 그 열들이 후보 키가 된다.

 

4. Alternate Key (대체 키)

앞서 말한 후보 키들 중에서 기본 키로 선택되지 않은 키를 대체 키라고 한다. 즉, 대체키+기본키 = 후보키

  • 앞서 맥락과 같다. 기본키와 같은 조건이지만 기본 키는 아니다. 기본 키는 1개니까.

→ 테이블 내에서 기본 키 외에 추가적으로 고유한 값을 식별할 필요가 있을 때 사용

 

5. Unique Key (유니크 키)

유니크 키는 테이블 내에서 고유한 값을 가지는 키이다. 고유한 값이라는 점에서 기본키와 비슷하지만, 유니크 키는 NULL을 허용한다 !!!!

  • 중복된 값을 허용하지 않아서 고유하지만, NULL을 허용한다.

→ 기본 키 외에도 특정 열의 고유성을 보장하고자 할 때 사용됨.

ex) 이메일 주소처럼 고유해야하지만 NULL을 허용할 수 있는 속성

 

 

정리

  • 외래키 = 다른 테이블의 기본 키를 참조하여 테이블 간 관계를 정의하는 키.
  • 후보키 = 기본키가 될 수 있는 모든 유일한 키 집합, NULL과 중복 허용 불가. (기본키 + 대체키로써, 유일성과 최소성 보장하는 기본키의 후보들)
    • 대체키 = 후보키 중, 기본 키로 선택되지 않은 유일한 키.
    • 기본키 = 선택된 후보키로, 각 행을 고유하게 식별해서 not null & 중복허용 안하는 키.
  • 유니크 키 = 고유한 값을 가지는데, NULL을 하나만 허용하는 키.
  유일성
최소성
(최소 속성 집합 여부)
NULL 설명
Super Key O (중복 불가) X (불필요한 속성 포함 가능) X 행을 고유하게 식별하는 모든 속성 집합.
Primary Key O (중복 불가) O (최소 속성 집합) X 테이블에서 각 행을 고유하게 식별하는 키. 하나의 PK만 가능.
Foreign Key X (중복 가능) X (최소성 보장 안됨) O 다른 테이블의 기본 키를 참조하여 테이블 간의 관계를 정의함.
Candidate Key O (중복 불가) O (최소 속성 집합) X 기본 키가 될 수 있는 모든 키의 집합. 기본 키와 동일한 제약 조건.
Alternate Key O (중복 불가) O (최소 속성 집합) X 후보 키 중 기본 키로 선택되지 않은 키.
Unique Key O (중복 불가) O (최소 속성 집합) O 테이블 내에서 고유한 값을 가지는 키. NULL 값 허용 가능.

 

이 포함관계를 표시하면 다음과 같다.

 

 

유니크키는 후보키가 아닌 것을 의미하는 것으로 이해했는데, 좀 찾아보니 그건 아니라고 해서 다시 공부해보고 정리해야겠다. 간단히 정리하면

  • 후보키 = 기본키 후보자들이고 not null (유일성, 최소성 보장)
  • 유니크키 = 고유하고 null허용.

→ 따라서 not후보키라고 해서 반드시 유니크키라고 말할 순 없다.

반응형