본문 바로가기
데이터분석 공부하기

Primary Key의 종류

by 고공이 2021. 8. 15.

Primary Key

Primary Key는 기본키라고 하며, 테이블에서 특정 row 하나를 식별하는 역할을 해줍니다. 특정 컬럼을 Primary Key로 설정하게 되면 Primary Key에 있는 같은 값이 추가되는 것을 DBMS가 자동으로 막아주기 때문에 중복을 방지하는 중요한 역할을 합니다. 그러니 Primary Key는 고유한 값을 나타내는 컬럼으로 설정해줘야 합니다.

 

Primary Key의 종류에는 크게 두 가지로 나눌 수 있습니다. 바로 Natural KeySurrogate Key입니다.


Natural Key

- 어떤 개체가 갖고 있는 실제 속성을 나타내는 컬럼을 Primary Key로 설정할 때 이를 Natural Key라고 합니다. 예를 들어 도서관에 있는 책들을 각자 고유번호가 있죠. 이 고유번호대로 책들은 정리가 되어 있을 겁니다. 사람들은 보고 싶은 책들을 검색하여 이 번호를 가지고 꽂아져 있는 책을 찾으러 가죠. 즉, 이러한 고유 속성을 나타내는 컬럼이 Primary Key가 되면 Natural Key라고 합니다.

 

출처: 독서신문

 

Surrogate Key

- 어떤 개체의 실제 속성은 아니지만 Primary Key로 쓰기 위해 추가한 컬럼을 Surrogate Key라고 합니다. 아래의 사진에 보다시피 그저 순차적 의미만을 부여하기 위한 id 컬럼이 바로 Surrogate Key입니다. 그래서 주로 1부터 순차적으로 증가하는 정수 값을 가지게 됩니다. 참고로 아래의 테이블은 제가 SQL을 공부하고 있는 코드잇에서 제공하는 테이블입니다 :)

 

member 테이블

 

이렇게 id 컬럼은 1부터 시작해서 순차적으로 값이 증가하고 있습니다. 이 id 컬럼으로 특정 row를 식별할 수 있으니 당연하게 Primary Key의 역할을 할 수 있습니다. 그리고 대부분의 DBMS에는 매번 새로운 row가 추가될 때마다 id 컬럼에 이전보다 1씩 자동으로 증가하게 하는 기능이 존재합니다.

 

제가 공부하고 있는 MySQL에서도 이 기능이 존재하게 되는데요, member 테이블의 컬럼 구조를 살펴보면,

AI라고 써져 있는 부분이 보입니다. AI는 Auto Increment로 '자동 증가'라는 뜻으로, 이 체크 박스에 체크하게 되면 이제 id 컬럼의 값은 자동으로 1씩 증가하게 됩니다.

 

그러니까 row가 3행으로 이루어진 상황에서 새로운 row를 추가한다고 가정해 봅시다.

id 컬럼값을 입력하지 않고, email 컬럼부터 address 컬럼까지만 값을 넣어 새로운 row를 추가하면, 아래의 테이블과 같이 MySQL이 이전 row 값들과 겹치지 않는 새로운 값, 즉 이전 값에서 +1 한 값을 자동으로 넣은 4행을 추가해 줍니다.

그럼 새로운 row를 넣을 때 id 컬럼은 신경 쓸 필요가 없겠죠. MySQL이 자동으로 값을 넣어주니까요. 보통 이런 식으로 Primary Key는 Auto Increment 속성이 설정되어 있을 때가 많습니다. 그렇다면 이 Key는 Surrogate Key이고, MySQL에 의해 자동으로 관리되고 있는 컬럼이네라고 생각하시면 됩니다.

 


 

그렇다면 Natural Key와 Surrogate Key 중 어느 Key가 좋다고 할 수 있을까요? 정답은 없습니다!

 

 

각 상황마다 적절한 Key는 달라지며, 데이터베이스에 따라 사용하는 Key 또한 달라지게 됩니다. 제가 나중에 데이터베이스를 공부하게 되면 그때 깊이 다루도록 하겠습니다. 다시 Primary Key로 돌아가자면, 보통은 Surrogate Key를 선택하는 경우가 더 많습니다. 확률은 낮지만 만약 Primary Key로 설정해둔 Natural Key 중 하나의 값을 변경하게 되면 모든 row에 대해서 전체적으로 다시 수정을 해줘야 하기 때문입니다. 

 


 

이렇게 Primary Key의 종류에는 크게 Natural Key와 Surrogate Key가 있다는 것을 알게 되었습니다. 그렇다면 실무에서 쓰이는 Primary Key가 이 2가지 중 어디에 해당하는지 잘 알 수 있겠죠?

 

 

'데이터분석 공부하기' 카테고리의 다른 글

ANY, SOME, ALL  (0) 2021.10.10
여러가지 JOIN들  (0) 2021.09.12
Seaborn 시각화  (0) 2021.04.23
시각화와 그래프  (0) 2021.04.22
데이터베이스와 DBMS  (0) 2021.03.17

댓글