Notice
Recent Posts
Recent Comments
Link
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

미래학자

[MySQL] 4장 키(Primary Key, Foreign Key)의 종류와 함수적 종속 본문

DataBase

[MySQL] 4장 키(Primary Key, Foreign Key)의 종류와 함수적 종속

미래학자 2016. 11. 19. 14:34


이번 시간에는 데이터 베이스에서 키의 종류와 함수적 종속의 의미를 공부할 생각입니다.


  1. 키의 종류 (Primary Key, Foreign Key)
  2. 함수적 종속 (부분적 함수종속, 이행적 함수 종속)


1. 키의 종류 (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 

kite 

yoyo 

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 

kite 

yoyo 

doll 




color 테이블에서 blue가 사라진것은 예상했겠지만, toy_color에서 color가 blue인 데이터가 모두 사라진 것 또한 예상했는가?

생각해보면 색깔이 없어졌기 때문에 더이상 toy가 해당 색깔을 가질 수없는게 맞다. 


외래키로 설정을 한다면, 위와 같이 color 테이블의 데이터를 삭제할 때, 해당 테이블을 참조하는 테이블에서 관련 데이터를 함께 삭제할 수 있게 된다.


* 참조 무결성 : 외래키는 참조하는 테이블에 실제로 있는 값만 사용할 수 있음



슈퍼키 (Super Key) : 슈퍼키 또는 합성키라 불린다. 하나의 열이 키로사용되는 것이 아닌 2개 이상의 열이 합쳐서 

기본키로 사용하는 것이다.


 (* 슈퍼키를 사용하는 것이 좋다, 또는 사용하지 않는 것이 좋다는 의견으로 크게 갈리게 된다.

명확히 슈퍼키로 문제가 없는 것을 보장할 수 있다면 사용하겠지만, 그렇지않다면 별도의 기본키를 생성하여 사용하자.)



위에 toy_color 테이블을 보면 _id 열을 제거한 것을 볼 수 있다. toy_id 값과 color_id 값이 모두 일치하는 데이터는 없다. 이렇게 되면
유일성은 보장이 되기 때문에 후보키가 될 수 있게 되고, toy_id 열과 color_id 열을 합쳐 합성키로 사용할 수 있게 된다.


* 외래키가 참조하는 테이블의 기본키를 Parent Key, Parent Key를 가진 테이블을 Parent Table이라고도 한다.



2. 함수적 종속이란 (이행적 함수 종속, 부분적 함수 종속)

회사원

주민번호 

이름 

주소 

연락처 

직장

직장 주소 

직장 전화번호 


회사원 테이블을 보자. 주민번호가 기본키이다.(속성 중 밑줄은 기본키를 가르킨다.) 주민번호는 유일한 값으로 하나의 사람(데이터)에 매핑이 된다.

주민번호를 통해 특정 사람에 대해 이름, 주소, 연락처 등을 알 수 있다. 그런데 직장과 직장 주소, 직장 전화번호는 어떤가?

직장이 바뀌면 직장 주소, 직장 전화번호가 함께 바뀔 것이다. 


주민번호 -> 이름

              -> 주소

              -> 연락처

              -> 직장


직장 -> 직장 주소

        -> 직장 전화번호


위 처럼 관계를 나타낼 수 있다. 


이름, 주소, 연락처, 직장은 주민번호에 함수적으로 종속된다.

직장 주소, 직장 전화번호는 직장에 함수적으로 종속된다.



이행적 함수 종속



주민번호 -> 직장 -> 직장 전화번호


이때 전화번호는 주민번호에 대해 이행적 함수 종속 관계이다.




부분적 함수 종속


아래의 스마트폰 테이블은 핸드폰과 제조사가 합성키다.


스마트폰

 핸드폰

제조사 

운영체제 

 아이폰 7

APPLE

iOS 

갤럭시 S7 

SAMSUNG 

안드로이드 

 루미아

노키아 

윈도우 모바일 


이 때 함수 종속 관계를 보면


핸드폰 -> 운영체제

제조사 -(X)> 운영체제


운영체제는 합성키의 부분인 핸드폰에 대해서는 종속이다.

운영체제는 합성키의 부분인 제조사에 대해서는 종속이 아니다.


이 때 합성키의 부분적으로 함수적 종속인 관계를 부분적 함수 종속이라 한다.


다음 시간에는 지금 공부한 함수 종속의 이해를 바탕으로 정규화에 대해 공부한다.







Comments