우리가 살아가는 세상에는 수많은 사람들이 살아간다. 육안으로는 구별하기 힘든 쌍둥이도 존재하고, 이름이 동일한 사람들도 존재한다. 하지만 우리는 사람을 일일이 구별할 수 있어야 한다. 그래서 주민등록번호를 사람마다 부여함으로써 사람을 구별한다.
데이터베이스의 테이블에도 수많은 데이터가 저장되어 있다. 사람들을 구별하기 위해 주민등록번호가 필요하듯이, 수많은 데이터들을 구별하기 위해서 PK(Primary Key)라는 걸 사용한다. 즉, PK(Primary Key, 기본키)는 특정 데이터를 식별하기 위한 값이다. PK는 중복되어서는 안 되며, 비어있어서도 안 된다.
✅ 현업에서 PK(Primary Key)는 어떻게 설정할까?
가끔 주민등록번호, 이메일이 특정 데이터를 식별할 수 있는 데이터라고 생각해서 PK로 설정하는 걸 볼 수 있다. 하지만 이는 잘못됐다. 가능성은 적겠지만 주민등록번호, 이메일은 바뀔 가능성이 존재한다. PK(Primary Key)가 바뀌게 되면 특정 데이터를 식별하던 값이 바뀌어서 데이터를 관리하거나 사용하는 입장에서 혼란이 올 수 있다. 뿐만 아니라 RDBMS의 성능에도 안 좋은 영향을 미친다.
따라서 현업에서는 PK(Primary Key)를 주로 Auto Increment(숫자가 1씩 증가하는 방식)나 UUID(랜덤값)로 설정을 많이 한다.
✅ FK(Foreign Key, 외래키)란?
사용자와 게시글 데이터를 저장해야 한다고 가정하자. 데이터를 분리해서 저장하기 위해 사용자와 게시글 테이블을 만들어서 아래와 같이 저장했다. 그런데 아래와 같이 게시글 데이터를 저장하면 어떤 사용자가 게시글을 저장했는 지 알 수가 없다. 그래서 게시글 데이터를 저장할 때 사용자 데이터의 PK(기본키)를 같이 저장한다. 게시글 테이블에서 사용자의 PK를 저장하기 위한 값을 보고 FK(Foreign Key, 외래키)라고 얘기한다.
FK(Foreign Key, 외래키)를 한 줄로 요약하자면, 다른 테이블의 데이터와 관계를 연결하기 위한 키이다.
[FK 사용 전]
users (사용자)
id
이름
1
박재성
2
김유찬
posts (게시글)
id
제목
1
개발자 취업 방법 알려드려요!
2
면접 후기 공유합니다
3
TIL - 객체지향
[FK 사용 후]
users (사용자)
id (PK)
이름
1
박재성
2
김유찬
posts (게시글)
id (PK)
제목
user_id (FK)
1
개발자 취업 방법 알려드려요!
2
2
면접 후기 공유합니다
1
3
TIL - 객체지향
20 (Error)
** FK(외래키)를 설정했을 때 부가적인 기능이 하나 있다. 적절하지 않은 FK를 넣었을 때 DB에서는 에러를 발생시킨다. 즉, 적절하지 않은 FK를 넣는 걸 방지해준다. 이걸 보고 어려운 말로 ‘참조 무결성’이라고 한다. 말 그대로 결점(모순되는 점)이 없도록 유지하는 특성을 의미한다.
🧑🏻
데이터베이스에서 ‘무결성’이라는 단어가 참 많이 사용된다. 참조 무결성, 도메인 무결성, 엔티티 무결성 등 다양한 무결성이 있다. 하지만 각 무결성이 뭔지 외울 필요 없다. DB 설계할 때 하나도 안 중요한 개념들이다. 다만, 다른 책이나 강의를 볼 때 쉽게 이해할 수 있게 ‘무결성’이라는 단어가 어떤 뜻인지 나만의 말로 정리해두자.