본문 바로가기

📘 Computer Science/데이터베이스

[데이터베이스] 관계와 키

1. 관계


  • 하나의 데이터 베이스에는 여러 개의 테이블이 존재합니다. 
  • 여러 개의 테이블들은 서로 관계를 가지고 있고, 이런 관계를 '관계 화살표'를 이용하여 표현합니다.

 

[그림 1] 관계화살표 예시

 

 

여러 가지 관계의 종류에 대해서 알아봅시다.

 

(1) 1 : 1 관계

  • 유저 한 명에게는 하나의 유저 이메일이 존재한다고 해봅시다.
  • 그럼 유저와 유저 이메일은 1 : 1 관계를 가지게 됩니다.
  • 1 : 1 관계를 사용하면 두 개의 테이블로 나누어 테이블 구조를 더 쉽게 이해할 수 있도록 해준다는 장점이 있습니다.

[그림 2] 1 : 1 관계의 관계 화살표

 

 

(2) 1 : N 관계

  • 위에서 만들었던 유저 테이블이 존재하고, 만약 이 유저가 구매할 상품들을 장바구니에 담는다고 해봅시다.
  • 한 명의 유저는 여러 개의 상품을 장바구니에 담을 수 있습니다.
  • 이때는 유저와 상품이 1 : N 관계를 가지게 됩니다.
  • 여기서 주의해야 할 점은 유저가 장바구니에 어떠한 상품도 안 담을 수도 있기 때문에 0이라는 값도 생각해야 합니다.

[그림 3] 1 : N 관계의 관계 화살표

 

 

(3) N : M 관계

  • 만약 학생과 학생들이 듣는 강의가 여러 개 있다고 생각해 봅시다.
  • 한 명의 학생은 여러 개의 강의를 가질 수 있고, 하나의 강의도 여러 명의 학생을 가질 수 있습니다.
  • 이때는 관계 테이블을 하나 형성해서 학생과 강의가 N : M 관계를 가질 수 있도록 해줍니다.

[그림 4] N : M 관계의 관계 화살표

 

 

 

 

2. 키


  • 테이블 사이의 관계를 명확하게 구분할 수 있게 해 주고, 테이블 자체의 인덱스를 위해서 존재하는 개념이 '키(Key)'입니다.
  • 키의 종류에는 슈퍼키, 후보키, 기본키, 대체키, 외래키가 존재합니다.

[그림 5] 슈퍼키, 후보키, 기본키, 대체키의 관계

 

 

(1) 유일성과 최소성

  • 유일성은 말 그대로 중복되는 값이 없이 유일한 값이어야 하는 성질을 말합니다.
  • 최소성은 해당 키를 구성하는 모든 부분 집합들이 유일성을 가지지 않는 성질을 말합니다.
  • 다시 말해서 유일성은 하나의 Key로 하나의 Tuple을 유일하게 구별할 수 있는 성질을 말하고, 최소성은 꼭 필요한 속성들만을 가지고 구성되어 있는 성질을 말합니다.

[그림 6] 속성 A, B, C에 대한 표

 

[그림 6]을 예시로 들면서 유일성과 최소성을 이해해 봅시다.

[그림 7] 그림 6을 분석해본 표

 

[그림 7]은 키가 될 수 있는 요소의 부분 집합을 알아보고, 유일성과 최소성 그리고 키로 사용할 수 있는지의 여부를 분석해 본 표입니다.

  • (A), (B), (C)는 각각 겹치는 값들이 존재하기 때문에 유일성을 만족하지 않습니다. 유일성을 만족하지 않기 때문에 최소성은 볼 필요도 없이 존재하지 않고, 키로 사용할 수 없습니다.
  • (A, B), (B, C), (A, C)는 각각 겹치는 값들이 없기 때문에 유일성을 만족합니다. 최소성을 보기 위해서 각 요소의 부분 집합을 확인해 보면 각 부분 집합의 요소들이 모두 유일성을 가지고 있지 않기 때문에 키로 사용할 수 있습니다.
  • (A, B, C)는 겹치는 값들이 없기 떄문에 유일성을 만족합니다. 하지만 부분 집합 중 {A, B}, {B, C}, {A, C}는 이미 유일성을 가지고 있기 때문에 키로 사용할 수 없는 슈퍼키입니다.

 

 

(2) 기본키 (Primary Key, PK)

  • 기본키는 유일성과 최소성을 모두 만족하는 키를 말합니다.
  • 기본키를 사용하면 테이블에서 어떤 요소를 유일하게 구분해 낼 수 있습니다.
  • 기본키는 자연키와 인조키 중에서 골라서 설정하게 됩니다.

 

# 자연키

이름 그대로 속성 중 자연스럽게 중복되지 않는 것들을 뽑다가 나오는 키를 말합니다. "이름", "성별", "주민등록번호"가 있을 때, 이름과 성별을 중복된 값이 들어올 가능성이 매우 높습니다. 그에 반해 주민등록번호는 중복될 가능성이 매우 희박하기 때문에 자연스럽게 주민등록번호를 키로 사용하게 됩니다.

 

# 인조키

요소마다 인위적으로 어떤 Id 값을 부여하는 것을 말합니다. 대표적으로 MySQL의 auto-increment가 인조키의 예시에 속합니다. 사용해 봤다면 알겠지만, MySQL에서 데이터를 추가하게 되면 순차적으로 Id 값이 증가하는 것을 볼 수 있습니다.

 

 

(3) 외래키 (Foreign Key, FK)

  • 다른 테이블의 기본키를 그래도 참조하는 값으로서 개체와의 관계를 식별하는 데 사용하는 키입니다.
  • 외래키는 중복되어도 상관없습니다.
  • 앞서 설명했던 관계 그래프에서 유저와 상품의 사이를 예시로 들어봅시다.

[그림 8] Product 테이블에 있는 외래키 user_id

 

Product와 User는 N : 1 관계를 가지고 있기 때문에 Product에서 자신을 주문한 User에 대한 정보를 가지고 있어야 합니다. 이때 관계를 연결시켜 주기 위해서 Product 테이블에 자신을 주문한 User의 Id 값을 외래키로 넣어줍니다.

 

 

(4) 후보키 (Candidate Key)

  • 기본키(PK)가 될 수 있는 후보들의 집합입니다.
  • 후보키도 유일성과 최소성을 모두 만족합니다.

 

 

(5) 대체키 (Alternate Key)

  • 기본키로 대체될 수 있는 키를 말합니다.
  • 후보키가 여러 개인 경우 1개를 기본키(PK)로 지정하고, 기본키가 되지 못한 나머지 후보키들을 모두 대체키라고 할 수 있습니다.

 

 

(6) 슈퍼키 (Super Key)

  • 유일성을 만족하는 키를 말합니다.

 

 

💡 면접에서 나올 수 있는 질문들

  1. 키의 종류와 특징에 대해서 설명해 보세요.
  2. 유일성과 최소성에 대해서 설명해 보세요.

 

🔗 참고 자료

면접을 위한 CS 전공지식 노트

'📘 Computer Science > 데이터베이스' 카테고리의 다른 글

[데이터베이스] 조인의 원리  (0) 2023.05.30