키(Key)의 정리

이창준·2023년 3월 29일
1
post-thumbnail

키(Key) :

  • 특정 투플을 식별할 때 사용하는 속성 혹은 집합.
  • 릴레이션은 중복된 투플을 허용하지 않음 => 각각의 투플에 포함된 속성들 중 어느 하나(혹은 하나 이상)은 값이 달라야만 함. 즉 키가 되는 속성(혹은 속성 집합)은 반드시 값이 달라서 투플들을 서로 구별할 수 있어야 함.
  • 키는 릴레이션 간의 관계를 맺는 데도 사용됨.

키의 종류

  1. 슈퍼키
  2. 후보키
  3. 기본키
  4. 대리키
  5. 대체키
  6. 외래키

1. 슈퍼키

: 투플을 유일하게 식별할 수 있는 하나의 속성 혹은 속성의 집합

(고객 릴레이션 예)

  • 고객번호 : 고객별로 유일한 값이 부여되어 있기 때문에 투플을 식별할 수 있음
  • 이름 : 동명이인이 있을 경우 투플을 유일하게 식별할 수 없음
  • 주민번호 : 개인별로 유일한 값이 부여되어 있기 때문에 투플을 식별할 수 있음
  • 주소 : 가족끼리는 같은 정보를 사용하므로 투플을 식별할 수 없음
  • 핸드폰 : 한 사람이 여러 개의 핸드폰을 사용할 수 있고 반대로 핸드폰을 사용하지 않는 사람이 있을 수 있기 때문에 투플을 식별할 수 없음

■ 고객 릴레이션은 고객번호와 주민번호를 포함한 모든 속성의 집합이 슈퍼키가 됨

ex) (주민번호), (주민번호, 이름), (주민번호, 이름, 주소), (주민번호, 이름, 핸드폰),
(고객번호), (고객번호, 이름, 주소), (고객번호, 이름, 주민번호, 주소, 핸드폰) 등

2. 후보키

: 투플을 유일하게 식별할 수 있는 속성의 최소 집합

(주문 릴레이션 예)

  • 고객번호 : 한 명의 고객이 여러 권의 도서를 구입할 수 있으므로 후보키가 될 수 없고, 고객번호가 1인 박지성 고객은 세 번의 주문 기록이 있으므로 투플을 유일하게 식별할 수 없음
  • 도서번호 : 도서번호가 2인 ‘축구아는 여자’는 두 번의 주문 기록이 있으므로 투플을 유일하게 식별할 수 없음

■ 주문 릴레이션의 후보키는 2개의 속성을 합한 (고객번호, 도서번호)가 됨
■ 2개 이상의 속성으로 이루어진 키를 복합키(composite key)라고 함

3. 기본키(primary key)

: 여러 후보키 중 하나를 선정하여 대표로 삼는 키

  • 후보키가 하나뿐이라면 그 후보키를 기본키로 사용하면 되고,
    여러 개라면 릴레이션의 특성을 반영하여 하나를 선택하면 됨

  • 기본키 선정 시 고려사항
    1) 릴레이션 내 투플을 식별할 수 있는 고유한 값을 가져야 함.
    2) NULL 값은 허용하지 않음
    3) 키 값의 변동이 일어나지 않아야 함
    4) 최대한 적은 수의 속성을 가진 것이라야 함
    5) 향후 키를 사용하는 데 있어서 문제 발생 소지가 없어야 함

  • 릴레이션 스키마를 표현할 때 기본키는 밑줄을 그어 표시함

4. 대리키

: 기본키가 보안을 요하거나, 여러 개의 속성으로 구성되어 복잡하거나, 마땅한 기본키가 없을 때는 일련번호 같은 가상의 속성을 만들어 기본키로 삼는 경우가 있음 이러한 키를 대리키(surrogate key) 혹은 인조키(artificial key)라고 함

  • 대리키는 DBMS나 관련 소프트웨어에서 임의로 생성하는 값으로 사용자가 직관적으로 그 값의 의미를 알 수 없음
  • 위 그림에서는 주문번호가 대리키라 볼 수 있다.

5. 대체키

: 기본키로 선정되지 않은 후보키

ex) 고객 릴레이션의 경우 고객번호와 주민번호 중 고객번호를 기본키로 정하면 주민번호가 대체키가 됨

6. 외래키

: 다른 릴레이션의 기본키를 참조하는 속성을 말함

  • 다른 릴레이션의 기본키를 참조하여 관계 데이터 모델의 특징인 릴레이션 간의 관계(relationship)를 표현함
  • 외래키의 특징
    1) 관계 데이터 모델의 릴레이션 간의 관계를 표현함
    2) 다른 릴레이션의 기본키를 참조하는 속성임
    3) 참조하고(외래키) 참조되는(기본키) 양쪽 릴레이션의 도메인은 서로 같아야 함
    4) 참조되는(기본키) 값이 변경되면 참조하는(외래키) 값도 변경됨
    5) NULL 값과 중복 값 등이 허용됨
    6) 자기 자신의 기본키를 참조하는 외래키도 가능함
    7) 외래키가 기본키의 일부가 될 수 있음

      
profile
안녕하세요^^

4개의 댓글

comment-user-thumbnail
2023년 3월 30일

엔티티에서 자동증가하는 id가 일종의 대리키였군요.
그리고 대리키 부분 표가 투명해서 어두운 배경에서 잘 안보입니다..

답글 달기
comment-user-thumbnail
2023년 3월 30일

여러가지 키에대해 잘 몰랐는데 잘 읽었습니다 앗 그리고 표가 어두워서 잘 안보이긴하네요!

답글 달기
comment-user-thumbnail
2023년 3월 30일

슈퍼키와 후보키가 헷갈렸었는데 잘 정리해주셔서 이해가 되었습니다 ! 👍👍

답글 달기
comment-user-thumbnail
2023년 3월 30일

여러가지 키와 그 개념에 대해서 깔끔하게 정리되어 있는것 같습니다.

답글 달기