jacketList

[DB] 데이터베이스 키(key) 정리 본문

Cs/DataBase

[DB] 데이터베이스 키(key) 정리

ukkkk7 2023. 11. 24. 22:20
728x90
반응형

 

데이터베이스 무결성에 대해 먼저 정리하고 넘어가자

 

  • 개체 무결성 Entity Integrity
    • 기본키를 구성하는 속성은 null값을 가질 수 없다.
    • 기본키를 구성하는 속성은 다른 레코드와 중복될 수 없다.
  • 참조 무결성 Referential Integrity
    • 외래키를 구성하는 속성은 참조 릴레이션(테이블)의 기본키 값과 동일해야만 한다.
  • 도메인 무결성 Domain Integrity
    • 속성값은 속성이 정의된 도메인의 범위를 벗어날 수 없다.

이 무결성을 기억하며 각 키(key)들에 대해 알아보자

 

데이터베이스에서 키(key)가 존재하는 이유?

 

하나의 릴레이션에는 수많은 튜플이 존재하고 각 튜플간에는 중복되는 값이 있을 수 있다.

그래서 튜플을 구별해주기 위해 모든 속성을 이용하는 것보다 일부 속성만 이용하는 것이 효율성이 높기 때문에 키(key)를 설정하고 해당 키를 이용해 튜플을 구별해준다.

 

 

키의 종류

 

키에 대해 알아보기 전에 먼저 각각의 키가 만족시키는 특성에 대해 짚고 넘어가자

 

  • 유일성
    • 하나의 키값으로 레코드를 유일하게 식별할 수 있는 성질
    • 위의 그림과 같이 여러개의 튜플이 있고 이를 구분하려고 한다면 고객 아이디를 제외한 나머지 튜플은 중복된 값이 들어갈 수도 있다. 그렇다면 이 릴레이션에서 키는 고객아이디가 될 것이고 이렇게 각각의 튜플을 구분할 수 있는 성질을 유일성이라고 한다.
  • 최소성
    • 키를 구성하는 속성들 중 가장 최소로 필요한 속성들로만 키를 구성하는 성질을 의미하는데 즉 키를 구성하고 있는 속성들이 진짜 각 튜플을 구분하는데 필요한 속성들로만 구성되어 있는지를 의미한다
    • 위 릴레이션에서 고객아이디와 고객이름을 묶어 키로 지정할 수 있고 각 레코드도 구분할 수 있다. 하지만 고객 아이디 하나의 속성으로 레코드의 유일성을 보장하며 튜플을 구분할 수 있기 때문에 최소성을 만족하지 못한다. 

 

 

이제 각각 키에 대해 더 자세히 알아보자

 

 

 

슈퍼키(Super Key)

유일성의 특성을 만족하는  속성 또는 속성들의 집합이다.

다시 이 릴레이션을 보면 키는 각 속성을 묶어 하나의 속성으로 만드는 것도 가능하고 그냥 하나의 속성을 키로 가질수도 있다.

예를들어 -> 고객아이디 + 고객이름 or 고객이름 + 나이 이런 식으로 말이다.

만일 이렇게 속성을 묶었다면 이렇게 묶은 하나의 속성 또한 유일성을 만족해야 한다. 고객아이디 + 고객이름은 중복값이 발생하지 않아 슈퍼키로써의 조건을 만족하지만 고객이름 + 나이는 중복값이 발생할 수 있기 때문에 슈퍼키가 될 수 없다.

 

이렇게 어떤 속성끼리 묶거나 혹은 묶지 않아도 각 레코드를 구분할 수 있다면(유일성 확보) 해당 속성은 슈퍼키가 될 수 있다.

 

 

 

 

 

후보키(Candidate Key)

 

후보키는 유일성과 최소성을 만족하는 속성 또는 속성들의 집합이다.

 

즉 위에서 슈퍼키가 유일성을 만족한다고 했으니 슈퍼키에서 최소성을 만족하는 것이 후보키라는 것

만약 위에서처럼 고객아이디 + 고객이름을 슈퍼키로 갖는다고 치면 유일성은 만족하지만 최소성을 만족하지 못해 후보키가 될 수 없다.

 

위 릴레이션에서 후보키는 고객아이디만 가능하다

 

 

 

 

기본키(Primary Key)

 

고객 릴레이션에서 주소가 추가 되었다.

그렇다면 후보키는 고객아이디 , 고객이름 + 주소 두가지의 후보키가 존재할 수 있다(가족의 경우 주소는 같지만 이름이 같을 수는 없기 때문)

 

후보키가 여러개라면 데이터베이스 설계자나 관리자가 여러 후보키 중에서 기본적으로 사용할 키를 정해야 하는데 이를 기본키라고 부른다.

 

후보키가 기본키가 되기 위해서는 몇가지 기준이 있다.

  • NULL값을 가질 수 있는 속성이 포함된 후보키는 기본키로 부적합
  • 값이 자주 변경될 수 있는 속성이 포함된 후보키는 기본키로 부적합

이러한 기본키는 아래와 같은 속성을 갖는다

  • NULL값을 가질 수 없다(개체 무결성의 첫번째 조건)
  • 기본키로 정의된 속성에는 동일한 값이 중복되어 저장될 수 없다.(개체 무결성의 두번째 조건)

여기서 기본키는 유일성 + 최소성을 만족하는 고객아이디가 적합하다.

 

 

대체키(Alternate Key)

 

대체키는 기본키로 선택받지 못한 후보키들이다. 기본키를 대신할 수 있는 자격은 있지만 기본키가 되기 위한 조건 중 어딘가에 맞지 않아 후보로 전락한 것이다.

 

위에서 고객이름 + 주소는 후보키 이지만 고객아이디가 기본키가 되었으니 고객이름 + 주소는 대체키가 된다.

 

 

 

 

외래키(Foreign Key)

 

외래키는 어떤 릴레이션에 속한 속성 또는 속성 집합을 다른 릴레이션에서 그대로 참조하는 키이다.

 

위의 그림처럼 

고객 릴레이션과 주문 릴레이션이 있다 주문 릴레이션에선 주문한 사람의 정보가 필요할테니 고객 릴레이션과 관계를 맺어야 한다.

하지만 주문 릴레이션 자체에선 고객의 정보를 전부 저장할 필요는 없다. 단지 고객 릴레이션에서 튜플을 구분할 수 있는 기본키가 되는 속성만을 가지고 있으면 된다.

이렇게 고객아이디라는 기본키를 참조하는 주문 릴레이션의 주문고객이라는 속성을 외래키라고 한다.

 

외래키 속성의 도메인과 참조되는 기본키 속성의 도메인은 반드시 같아야 한다.

도메인? 데이터베이스에서 도메인이란 릴레이션에 포함된 각 속성들이 가질 수 있는 값의 집합이라 할 수 있다.

고객 릴레이션의 등급을 보면 도메인 값으로 gold, silver, vip, bronze이런식으로 정했다면 해당 값들만 들어가야 된단는 것

 

 

유일키(Unique Key)

중복값을 허용하지 않지만 NULL값이 허용되는 키, 릴레이션에서 여러 속성에 지정할 수 있다.

즉 값이 중복되지는 않지만 없을 수도 있는 데이터를 유일키로 지정해준다.

728x90
반응형

'Cs > DataBase' 카테고리의 다른 글

[DataBase] 트랜잭션(transaction)  (0) 2024.02.06
[데이터베이스] 조인  (0) 2023.11.29
[DataBase][자료구조]B tree, B+tree  (1) 2023.11.27
RDBMS와 NoSQL  (5) 2023.11.26
ERD설계와 정규화  (1) 2023.11.25