데이터베이스의 Key의 구분과 속성

msung99·2022년 10월 24일
0
post-thumbnail

데이터베이스를 공부하시다 보면 테이블(table) 과 더붙에 키(Key) 에 대한 이론은 빼놓을 수가 없을겁니다. 이번 포스팅에서는 데이터베이스의 다양한 Key 의 종류와 특징들에 대해 정리해 보겠습니다.

(본 포스팅은 테이블에 대한 기초지식이 있으셔야 이해하기 수월합니다.)


유일성과 최소성

우선 각 Key 의 속성을 이해하려면 유일성과 최소성 이라는 개념에 대해 알고있는게 좋습니다.

  • 유일성 : 하나의 키 값으로 튜플을 유일하게 식별할 수 있는 성질이며,
  • 최소성 : 키의 구성하는 속성들 중 꼭 필요한 최소한의 속성들로만 키를 구성하는 성질입니다.

이때 유일성은 각각의 튜플을 서로 구분할 수 있어야하는 특징을 지닙니다.
이렇게 말씀드려도 잘 이해가 안되실 수 있습니다. 지금 당장은 이해 못하셔도 괜찮으니, 아래 다양한 key 들의 특징에 대해 이해하시다보면 자연스래 유일성, 최소성도 이해가 되실테니 크게 걱정 안하셔도 됩니다.


데이터베이스의 키(Key) 란?

키(key)란 데이터베이스에서 조건에 만족하는 튜플을 찾거나 순서대로 정렬할 때 다른 튜플들과 구별할 수 있는 유일한 기준이 되는 속성 을 의미합니다.

이러한 키는 크게 5가지의 종류로 구분이되는데, 이러한 키들을 구분하는 기준점이자 특징이 바로 유일성과 최소성 이라고 할 수 있습니다.

키의 종류는 아래와 같습니다.

슈퍼키(SuperKey), 후보키(Candidate Key), 기본키(Primary Key), 대체키(Replacement Key), 외래키(Foreign Key)

아래에서 5가지의 키들에 대해 설명해보겠습니다.


슈퍼키(SuperKey)

유일성을 만족하는 키. 어떤 속성끼리 묶던 중복값이 나오지 않고 서로 구별만 할 수 있으면 된다.
(ex. 학번, 주민번호, 이름+나이)

위 테이블은 팀원 4명에 대한 정보를 나타낸 것으로, 학번, 이름, 주민등록번호, 나이이라는 속성이 존재합니다.

이러한 각 팀원을 구분할 수 있는 것은 타인과 절대 겹치지 않는 학번, 주민번호가 될 수 있습니다.

또한 이름과 나이을 묶어서 하나의 속성으로써 구분지을 수 도 있습니다. 즉, 이름과 나이을 하나의 속성으로 보고 타인과 절대 겹치지 않는 속성이자 구분을 지을 수 있는 키(key) 가 될 수 있습니다.

이렇듯 어떤 속성끼리 묶던 중복값이 안나오고 서로 구별만 할 수 있다면 그것은 바로 슈퍼키가 될 수 있습니다.

즉, 위 예제에서는 "학번", "주민번호", 그리고 "이름+나이" 가 슈퍼키가 될 수 있는 것입니다.

또한 이렇듯 각 속성들이 중복값이 등장하는 않는 특성을 유일성 이라고 부릅니다.


후보키(Candidate Key)

유일성과 최소성을 만족하는 키. 기본키가 될 수 있는 후보이기 떄문에 후보키라고 부른다.
(ex. 주민등록번호, 학번 등)

슈퍼키들 중에서 속성을 최소한의 개수로하여 테이블의 각 객체들을 구분할 수 있어야 후보키가 될 수 있습니다.

예를들어 학번, 슈퍼키, 주민번호 슈퍼키는 속성들이 각각 1개씩으로만 이루어져 있습니다.
반면 이름+나이 슈퍼키는 이름과 나이를 묶어서 2개의 속성으로 구성되어 있습니다. 이름+나이 슈퍼키는 주민번호 슈퍼키와 학번 슈퍼키보다 속성이 많아서 최소성을 만족하지 못합니다.

이렇듯 키의 구성하는 속성들 중 꼭 필요한 최소한의 속성들로만 키를 구성하는 성질을 최소성이라고 합니다.


기본키(Primary key)

후보키들 중에서 하나를 선택한 키로, 최소성과 유일성을 만족하는 속성이다.

테이블에서 기본키는 유일하게 1개만 지정할 수 있습니다.
위 테이블에서 기본키가 될 수 있는것은 학번키와 주민번호키입니다.


대체키(Replacement Key)

후보키가 2개 이상일 경우 그 중에서 어느 하나를 기본키로 지정하고 남은 후보키들을 대체키라고 한다.

그렇다면 위에서 학번키가 기본키(primary key) 가 된다면, 나머지 주민번호키는 무엇인가!? 라고 물었을때, 이렇게 기본키가 되지 못한 나머지 후보키(candidate key)들을 대체키(replacement key) 라고 부릅니다.

즉, 위 테이블에서는 주민번호 키가 바로 대체키가 되겠죠~?


외래키(Foreign Key)

어떤 테이블(relation) 간의 기본 키(primary key) 를 참조하는 속성으로, 테이블간의 관계를 나타내기 위해서 사용된다.

외래키는 위 4개의 키들과 별개의 개념(?) 으로써, 별도로 이해하셔야할 개념입니다.

참조될 테이블 A 와 그를 참조할 테이블이 있다고 가정하면,
테이블 A의 열의 값은 기본키(Primary key) 로 설정되어 있어야합니다.

특히 외래키는 RDMS 에서 자주 쓰이게될 개념으로써, 각 데이터베이스 테이블사이의 관계를 매핑할 때 사용됩니다.

데이터베이스의 관계

1. 1:1

어느 엔티티쪽에서 상대 엔티티와 반드시 단 하나의 관계를 가지는 것
ex) 학생 A - 학번 12191638

2. 1:N

한쪽 엔티티가 관계를 맺은 엔티티쪽의 여러 객체를 가질 수 있는것

ex) 부모 - 여러명의 자식
여러명의 자식 입장에서 한 쌍의 부모중어떤 부모에 속해있는지를 표현해야하므로, 부모 테이블의 PK 를 자식 테이블에 FK 로 집어넣어서 관계를 표현합니다.

3. N:M

  • 양쪽 엔티티 모두에서 1:n 관계를 가지는 것
    ⇒ 즉, 서로가 서로를 1:n 관계로 보고있는 것입니다.

ex) 학원 - 학생의 관계
⇒ 한 학원에는 여러명의 학생이 수강할 수 있으므로 1:n 관계를 가집니다. 반대로 학생도 여러개의 학원을 수강할 수 있으므로, 이 사이에서도 1:m 관계를 가집니다. 따라서 학원과 학생은 n:m 관계를 가진다고 할 수 있겠습니다.


참고

https://limkydev.tistory.com/108

https://inpa.tistory.com/entry/DB-%F0%9F%93%9A-%ED%82%A4KEY-%EC%A2%85%EB%A5%98-%F0%9F%95%B5%EF%B8%8F-%EC%A0%95%EB%A6%AC

0개의 댓글