공부공부공부를 합시다/MySQL을 공부해 봅시다

[MySQL] 2nd Study - Key란 무엇일까?

뻒음 2021. 6. 3. 21:42

 

데이터베이스와 SQL을 공부하다보면 열쇠 모양의 아이콘이나 굵은 글씨체 또는 밑줄로 표시된 특별한 컬럼을 만날 때가 있습니다.

이 표기를 지닌 컬럼은 '**키'라고 불리며 다른 컬럼들에 비해 특별한 의미를 가지는데요.

이번 포스팅에서는 이 key에 대해 알아보겠습니다.

 

 

 

 

표와 그림을 보면 외래키를 제외한 각 키가 포함관계를 가지는 것을 알 수 있습니다.

 

한 학교의 데이터를 예로 들어 보겠습니다.

컬럼이 이름, 성별, 생년월일, 학년, 반, 번호, 집주소, 휴대전화번호로 여덟 개가 있는 테이블이 존재한다고 합시다. 

현재 이 테이블이 가지고 있는 데이터로는 [학년, 반, 번호], [학년, 생년월일, 이름], [휴대전화번호] 또는 [이름, 생년월일, 집주소]로 각 행을 고유하게 식별할 수 있다고 합시다. 그렇다면 이 속성의 집합들은 기본키의 후보가 될 수 있는 후보키입니다.

그런데 [학년, 반, 번호]로 각 행을 고유하게 식별할 수 있다면 [학년, 반, 번호, 이름]의 속성 집합으로도 각 행을 고유하게 식별할 수 있습니다. 이러한 속성 집합들을 모두 수퍼키라고 할 수 있습니다.

DB의 관리자가 대부분의 학교에서 사용하는 방법인 [학년, 반, 번호]로 테이블의 각 행을 고유하게 식별하기로 했습니다. 그렇다면 이 속성 집합은 기본키로, 선택되지 않은 나머지 후보키는 대체키로 부릅니다.

 

 

 

그렇다면 그 테이블에서 각 행을 고유하게 식별하는 최소의 집합이기만 한다면 모두 기본키가 될 수 있을까요?

그건 아닙니다.

기본키를 선정할 때는 고려해야 할 것들이 있습니다.

 

앞선 예에서,

  • 다음 년도에 [학년, 생년월일, 이름]이 모두 같은 학생이 입학할 수도 있습니다.
  • 휴대전화가 없어 [휴대전화번호]가 없는 사람이 있을 수도 있지요.
  • 학기 중에 어떤 학생은 이사를 해서 집주소가 변경될 수도 있습니다.

이러한 경우는 기본키 선정시 고려대상에서 제외됩니다.

가능하면 복합 기본키를 피하기 위해 [학년, 반, 번호]라는 속성 집합을 학번으로 변경하여 사용하는 것도 좋습니다.

 

 

 

 

 

 

 

 

 

실습

이번 포스팅에서는 기본키를 설정하는 두 가지 방법을 알아보겠습니다.

 

 

1. 테이블 생성 시에 설정하는 방법

 

 

 

 

2. 생성된 테이블에서 마우스 클릭으로 설정하는 방법

 

 

 

 

 

 

이외에도 몇 가지 방법을 더 사용할 수 있지만, 지금까지 DB와 테이블 생성에 대한 쿼리(SQL에서 명령을 내리는 코드를 지칭하는 말)만 공부하였으므로 여기에 추가하지 않았습니다.

다른 방법이 궁금하시다면 우리의 선생님 'Google 검색'을 찾아가봅시다!