프로그래밍/Database

[Database] 키 (Key)

미냐님 2020. 4. 6. 20:38
728x90

키의 개요

  1. 키 (Key)
    • 키 란?
      • 릴레이션에서 투플을 구별할 수 있게 하는 유일한 속성 (집합)
      • 릴레이션 간의 관계를 맺는데 사용
    • 키의 특성
      • 한 릴레이션에서 투플의 키는 같은 값을 가질 수 없다 (유일성)
      • 최소한의 속성들로만 키를 구성해야 한다 (최소성)
    • 키의 종류
      • 수퍼키 (Super Key)
      • 후보키 (Candidate Key)
      • 기본키 (Primary Key)
      • 대체키 (Alternate Key)
      • 외래키 (Foreign Key)
      • 대리키 (Surrogate Key)
  2. 키의 종류
    • 수퍼키 (Super Key)
      • 투플을 유일하게 식별할 수 있는 속성들의 집합 (유일성)
        • 하나의 릴레이션에서 키로 지정된 속성의 값은 투플마다 달라야 한다.
      • 투플을 유일하게 식별할 수 있는 값이면 모두 수퍼키가 될 수 있다
      • 예 : 사원 명부
        • 사번 : 사원별로 유일한 값으로 부여되므로, 투플을 구별할 수 있다
        • 직책 : 같은 직책이 존재할 수 있으므로, 투플을 구별할 수 없다
        • 이름 : 같은 이름이 존재할 수 있으므로, 투플을 구별할 수 없다
        • 생년월일 : 생일이 같을 수 있으므로, 투플을 구별할 수 없다
        • 주소 : 주소가 같을 수 있으므로, 투플을 구별할 수 없다
      • 사원 명부의 슈퍼 키 : 사번을 포함하는 속성의 집합
        • (사번), (사번, 직책), (사번, 이름), (사번, 생년월일), (사번, 주소), (사번, 직책, 이름), (사번, 직책, 생년월일), (사번, 직책, 주소), (사번, 이름, 생년월일), (사번, 이름, 주소), (사번, 생년월일, 주소), (사번, 직책, 이름, 생년월일), (사번, 직책, 이름, 주소), (사번, 이름, 생년월일, 주소), (사번, 직책, 생년월일, 주소), (사번, 직책, 이름, 생년월일, 주소)
    • 후보키 (Candidate Key)
      • 투플을 식별할 수 있는 속성들의 최소 집합 (최소성)
      • 하나의 속성으로 구성된 키 : 최소성을 만족하여 후보키로 가장 좋다.
      • 수퍼키 중에서 최소성을 만족하는 키
        • 후보키는 유일성과 최소성을 만족하여야 한다.
      • 후보키의 특성은 투플이 삽입, 수정되어도 유지되어야 한다.
      • 예 : 사원 릴레이션
        • 사번 : 후보키로 가장 좋다.
        • (직책, 이름), (직책, 이름, 생년월일) - 유일성을 만족 못하는 경우 발생하므로 후보키가 될 수 없다.
    • 기본키 (Primary Key)
      • 후보키 중에서 하나를 선정하여 사용하는 대표키
        • 후보키가 하나일 경우 : 기본키
        • 후보키가 여러 개 일 경우 : 릴레이션의 특성을 반영하여 하나를 선택
      • 기본 키 선정시 주의 사항
        • 유일성과 최소성을 만족하여야 한다.
        • NULL 값을 가질 수 있는 속성은 부적합하다.
        • 값이 바뀌지 말아야 한다.
        • 가장 단순한 후보키를 선택한다.
      • 릴레이션 스키마를 표현할 때, 기본키는 속성에 밑줄로 표시한다.
        • 릴레이션이름( 속성1, 속성2, … , 속성N )
      • 예 : 사원 릴레이션
        • 사원( 사번, 직책, 이름, 생년월일, 주소 )
        • 사원( 사번, 직책, 이름, 생년월일, 주소 ) : 대부분의 경우, 이름+주소는 기본키로 가능하지만, 투플을 구별할 수 없는 경우가 발생될 수도 있다.


    • 대체키 (Alternate Key)
      • 기본키로 선택되지 못한 후보키


    • 외래키
      • 다른 릴레이션의 기본키를 참조하는 속성(집합)
      • 관계 데이터 모델의 특징인 릴레이션간의 관계(Relationship)을 표현
      • 특징
        • 관계 데이터 모델의 릴레이션 간의 관계를 표현
        • 다른 릴레이션의 기본키를 참조하는 속성
        • 외래키와 기본키의 도메인은 같아야 한다.
        • NULL 값이 허용되며, 중복되어도 된다.
        • 외래키가 기본키의 일부가 될 수 있다.


      • 외래키가 참조되는 릴레이션의 기본키가 아닐 경우
        • 외래키는 다른 릴레이션에서 하나의 투플을 구별하여야 함
        • 참조되는 릴레이션의 투플을 구별할 수 없는 경우가 발생
      • 외래키가 자신이 속한 릴레이션의 기본키를 참조하도록 외래키를 정의할 수 있다.


    • 대리키 (Surrogate Key) / 인조키 (Artificial Key)
      • 일련번호와 같은 가상의 속성을 만들어 기본키로 사용하는 키
      • 대리키를 사용하는 경우
        • 기본키가 유출되어서는 안될 경우
        • 여러 개의 속성으로 구성되어 복잡할 경우
        • 마땅한 기본키가 없을 경우
      • 대리키는 DBMS가 임의로 생성하는 값으로 사용자가 직관적으로 알 수 없다.
728x90