Posts [Database] 키(Key) 개념과 종류
Post
Cancel

[Database] 키(Key) 개념과 종류

키의 개념

키(key) 란 데이터 베이스에서 조건에 만족하는 튜플을 찾거나 순서대로 정렬할 때 기준이 되는 속성을 말한다.

이 키가 왜 필요한지에 대한 이유는 바로 중복이 되지 않고 이상 현상 (삽입 이상, 수정 이상, 삭제 이상 등) 을 방지 하기 위해서이다. 결국에 어떤 특정 데이터를 검색하거나 정렬을 하고 싶을 때 이 키(key) 라는 녀석으로 내가 원하는 값을 얻고 식별 할 수 있는 것이다.

키의 종류

키의 종류에는 크게 기본키(Primary key), 후보키(Candidate key), 대체키(Alternate key), 외래키(Foreign key) 가 있다.

기본키 (Primary key)

기본키(Primary key)는 쉽게 말해서 유일무이한 값을 가진 키라고 생각할 수 있다. 쉬운 예로는 우리나라에는 김민수씨가 당연히 한명이 아닐 것이다. 따라서 우리는 여러명의 김민수를 구분하기 위해 주민등록번호 를 사용한다. 여기서 이 주민등록번호 가 기본키라고 이해하면 쉬울 것이다.

기본키의 특징

  1. 속성이 항상 고유한 값을 가져야한다.
  2. 속성이 Null 값이면 X
  3. 속성의 값이 변경될 가능성이 높은 속성은 기본키로 선정하지 않는 것이 좋다.
  4. 테이블에 기본키는 하나만 만들 수 있다.

후보키 (Candidate key)

후보키 (Candidate Key)는 기본키의 부분집합이라고 할 수 있다. 앞서 말한 여러명의 김민수를 우리는 주민등록번호로 구별한다. 그런데 이 김민수를 우리는 휴대폰번호 를 이용해서 또한 구별이 가능하다. 결국에 후보키는 말그대로 기본키가 될 수 있는 후보키인 것이다. 그렇다면 후보키를 굳이.. ? 왜 두는 것일까 라고 생각해보면 다음의 예시를 통해 이해할 수 있을 것이다.

나를 포함해서 여러 사람들이 카드를 분실하는 경우가 꽤나 많다. 보통 카드 회사에서 고객 릴레이션에서 신용카드번호를 기본키로 사용하고, 주민등록번호를 대체키(후보키)로 사용하게 된다. 고객이 해당 카드에 대한 어떤 처리를 하기 위해서는 신용카드번호를 사용해 고객 튜플에 접근한다. 하지만 분실했을때.. ? 다들 자기 신용카드 번호를 외우고 있진 않다. 그래서 분실신고를 하게되면 주민등록번호를 상담원에게 말을하게 되는데 이때 신용카드 번호( 기본키 )가 아닌 대체키(후보키)를 사용하게 되는 것이다.

후보키의 특징

  1. 유일성 만족 : 하나의 키값으로 하나의 튜플만을 유일하게 식별할 수 있어야 한다.
  2. 최소성 만족: 모든 레코드들을 유일하게 식별하는데 꼭 필요한 속성만으로 구성되어 있어야 한다.

대체키(Alternate key)

대체키(Alternate key)는 후보키가 둘 이상일 때 기본키를 제외한 나머지 후보키들을 말한다. 사실 위에 후보키를 설명하면서 대체키를 넣어 설명하기도 했다. 결국에 대체키는 후보키의 부분집합인 것이다.

외래키 (Foreign key)

외래키 (Foreign key)는 관계를 맺고 있는 릴레이션 R1, R2에서 릴레이션 R1이 참고하고 있는 릴레이션 R2의 기본키와 같은 R1 릴레이션의 속성을 외래키라고 한다.

즉 관련이 있는 여러 테이블들 사이에서 데이터의 일관성을 보장해 주는 수단이자, 두개의 테이블을 연결해 관계를 맺어주는 기준이 되는 키를 말하는 것이다.

예를 들어 customer테이블과 orders 테이블이 있다. 그리고 customers 테이블은 모든 고객 데이터, orders 테이블은 고객의 주문이 모두 기록되는 테이블이다.

customer 테이블

필드명특성
sid기본 키
last_name 
first_name 

orders 테이블

필드명특성
order_id기본 키
order_date 
customer_sid외래키
amount 

여기서 orders 테이블에 외래키를 설정하고 이 외래키가 customers의 sid 필드를 가리키는 것이다. 따라서, orders 테이블에서 주문한 고객의 정보를 참조할때 orders 테이블의 customers_sid -> customers 테이블의 sid 필드를 타고 참조하는 것이다.

This post is licensed under CC BY 4.0 by the author.

[Database] Join 이란, join의 종류, inner join과 outer join의 차이점

[Network] 쿠키 세션 캐시 차이점

Loading comments from Disqus ...