미래학자
[MySQL] 4장 키(Primary Key, Foreign Key)의 종류와 함수적 종속 본문
이번 시간에는 데이터 베이스에서 키의 종류와 함수적 종속의 의미를 공부할 생각입니다.
- 키의 종류 (Primary Key, Foreign Key)
- 함수적 종속 (부분적 함수종속, 이행적 함수 종속)
KEY의 종류를 먼저 나열하면
후보키 (Candidate Key) : 테이블을 구석하는 열 중에서 유일하게 식별할 수 있는 열
기본키 (Primary Key) : 테이블에서 유일하게 식별하기 위해 사용하는 키
대체키 (Alternate Key) : 후보키 중 기본키를 제외한 나머지 후보키
테이블에서 기본키가 꼭 필요한 것은 아니지만, 테이블과의 관계를 사용할 때는 그리고 실무에서는
매우 중요하다.
외래키 (Foreign Key) : 외래키란 테이블 내의 열 중 다른 테이블의 기본키를 참조하는 열을 외래키라 한다.
toy 와 color 예시를 한 번 보자.
color
color_id | name | rgb6 |
1 | red | FF0000 |
2 | pink | AA4655 |
3 | blue | 000FF |
toy_color
_id | toy_id (my_toy 테이블의 toy_id의 값을 참조) | color_id (color 테이블의 color_id의 값을 참조) |
1 | 2 | 1 |
2 | 5 | 1 |
3 | 7 | 2 |
4 | 2 | 2 |
5 | 2 | 3 |
6 | 7 | 3 |
7 | 5 | 3 |
my_toy(1NF)
toy_id | toy |
2 | kite |
5 | yoyo |
7 | doll |
위 테이블의 관계를 통해 아래와 같은 값을 얻을 수 있게 된다.
toy_id |
toy |
colors |
2 |
kite |
red, pink, blue |
5 |
yoyo |
red, blue |
7 |
doll |
pink, blue |
toy_color의 toy_id와 color_id는 모두 외래키다. 다른 테이블의 기본키를 참조하고 있기 때문이다. 그렇다면 외래키를 만든 이유가 무엇일까?
만약 color 중에서 blue 컬러가 아얘 사라진다면? 어떻게 데이터가 바뀔까?
color
color_id | name | rgb6 |
1 | red | FF0000 |
2 | pink | AA4655 |
toy_color
| toy_id (my_toy 테이블의 toy_id의 값을 참조) | color_id (color 테이블의 color_id의 값을 참조) |
| 2 | 1 |
| 5 | 1 |
| 7 | 2 |
| 2 | 2 |
my_toy(1NF)
toy_id | toy |
2 | kite |
5 | yoyo |
7 | doll |
color 테이블에서 blue가 사라진것은 예상했겠지만, toy_color에서 color가 blue인 데이터가 모두 사라진 것 또한 예상했는가?
생각해보면 색깔이 없어졌기 때문에 더이상 toy가 해당 색깔을 가질 수없는게 맞다.
외래키로 설정을 한다면, 위와 같이 color 테이블의 데이터를 삭제할 때, 해당 테이블을 참조하는 테이블에서 관련 데이터를 함께 삭제할 수 있게 된다.
* 참조 무결성 : 외래키는 참조하는 테이블에 실제로 있는 값만 사용할 수 있음
슈퍼키 (Super Key) : 슈퍼키 또는 합성키라 불린다. 하나의 열이 키로사용되는 것이 아닌 2개 이상의 열이 합쳐서
기본키로 사용하는 것이다.
(* 슈퍼키를 사용하는 것이 좋다, 또는 사용하지 않는 것이 좋다는 의견으로 크게 갈리게 된다.
명확히 슈퍼키로 문제가 없는 것을 보장할 수 있다면 사용하겠지만, 그렇지않다면 별도의 기본키를 생성하여 사용하자.)
주민번호 |
이름 |
주소 |
연락처 |
직장 |
직장 주소 |
직장 전화번호 |
회사원 테이블을 보자. 주민번호가 기본키이다.(속성 중 밑줄은 기본키를 가르킨다.) 주민번호는 유일한 값으로 하나의 사람(데이터)에 매핑이 된다.
주민번호를 통해 특정 사람에 대해 이름, 주소, 연락처 등을 알 수 있다. 그런데 직장과 직장 주소, 직장 전화번호는 어떤가?
직장이 바뀌면 직장 주소, 직장 전화번호가 함께 바뀔 것이다.
주민번호 -> 이름
-> 주소
-> 연락처
-> 직장
직장 -> 직장 주소
-> 직장 전화번호
위 처럼 관계를 나타낼 수 있다.
이름, 주소, 연락처, 직장은 주민번호에 함수적으로 종속된다.
직장 주소, 직장 전화번호는 직장에 함수적으로 종속된다.
이행적 함수 종속
주민번호 -> 직장 -> 직장 전화번호
이때 전화번호는 주민번호에 대해 이행적 함수 종속 관계이다.
부분적 함수 종속
아래의 스마트폰 테이블은 핸드폰과 제조사가 합성키다.
스마트폰
핸드폰 |
제조사 |
운영체제 |
아이폰 7 |
APPLE |
iOS |
갤럭시 S7 |
SAMSUNG |
안드로이드 |
루미아 |
노키아 |
윈도우 모바일 |
이 때 함수 종속 관계를 보면
핸드폰 -> 운영체제
제조사 -(X)> 운영체제
운영체제는 합성키의 부분인 핸드폰에 대해서는 종속이다.
운영체제는 합성키의 부분인 제조사에 대해서는 종속이 아니다.
이 때 합성키의 부분적으로 함수적 종속인 관계를 부분적 함수 종속이라 한다.
다음 시간에는 지금 공부한 함수 종속의 이해를 바탕으로 정규화에 대해 공부한다.
'DataBase' 카테고리의 다른 글
[MySQL] 6장 외래 키 설정하기, 1NF (테이블 쪼개기), (1) | 2016.11.21 |
---|---|
[MySQL] 5장 정규화 (1NF, 2NF, 3NF) (3) | 2016.11.19 |
[mySQL] 3장 내부 함수, 그룹 묶기 (SUM, COUNT, SUBSTRING, GROUP BY) (2) | 2016.11.18 |
[MySQL] 2장 데이터 변경, 삭제 (ALTER, SELECT, DROP, DELETE) (0) | 2016.11.17 |
(MySQL) 1장 시작하기. (DB 생성, 테이블 생성, SELECT) (10) | 2016.10.27 |