본문 바로가기
Come on IT/DataBase

Database PK가 꼭 필요할까? 왜 필요할까?

by JONGSKY 2022. 12. 11.
728x90
SMALL

1. 글을 작성하게 된 이유

 

기존 Database를 ORM을 사용하기 위해 연결하면서

Primary Key(PK)가 없을 때는 models.py가 class형태로 묶이지 않는다는 사실을 알게 되었다.

 

학부시절에 배웠던 내용으로는

Database는 PK FK가 있다. 그리고 PK는 검색할 때 속도적인 측면이나 여러 가지를 고려할 때

"PK는 있어야 한다. 있어야 좋다" 정도로 학습했던 기억이 있다.

 

그러나 왜? 왜 PK가 있어야 하고 있어야 좋을까 라는 고민이 생겼다.

왜 필요할까? 꼭 필요할까?

 

2. Database에는 PK가 필요하다.

 

결론만 이야기하면 RDBMS에서는 PK가 필요하고 무조건 써라.

 

기본 필드 키(PK)가 없으면 관계형 데이터베이스 쿼리에 문제가 발생한다.

DBMS에서 기본키(PK)는 필수적이다.

PK를 통해 다른 테이블을 Join이 가능해질 뿐아니라 일관성 없는 데이터가 반복적으로 쌓일 수 있다.

(여기서 일관성 없는 데이터란 PK가 없기 때문에 같은 데이터가 여러 개 쌓이는 문제 등을 포함한다.)

 

관계형 데이터베이스에서는 반드시 각 행 고유하게 식별되어야 하며, 이 규칙이 없다면 더 이상 관계형이 아니며

데이터 자체의 모호함이 생길 수 있다.

더군다나 한 테이블에서 다른 테이블을 참조하는 경우에는 정말 이상해진다.

(테이블에 고유식별id가 없기 때문에 어떻게 참조할지도 의문이다.)

 

검색하는 db가 아닌데 왜 column을 하나 더 만들어서 cost를 늘리나요?

 

PK를 사용한다고 해서 성능에 악영향은 거의 없습니다. 정말 작은 Cost를 사용하기 때문입니다.

하지만 PK를 사용하기 않았을 때의 성능대가는 굉장히 큽니다.

(조회 문제, 관계 문제, 속도 문제, 적재 순서 확인 불가 등)

 

3. PK / 숫자형 VS 문자형

 

엔진에 따라 다르다.

 

SQL Server로 예시를 들면 숫자형(integer)가 문자형(Character) 보다 빠르게 작동합니다.

그 이유는 SQL Server는 Character를 ASCII로 수정하는 과정이 있기 때문입니다.

 

그럼 숫자형이 문자형보다 빠르기 때문에 과연 좋을까?

그렇지도 않습니다. 단지 숫자만 쓰는 것이 아닌 문자형을 이용하면

DB 점검 등에 있어서 더 직관적으로 편하고 성능적으로 큰 차이가 없다라고 주장하기도 합니다.

 

따라서 엔진에 따라 달라질 수 있고 해당 db를 사용하는 목적 등에 따라 달라질 수 있다고 생각합니다.

 

 

4. 마치면서

 

결론적으로 RDBMS에서는 PK를 쓰는 것이 옳다.

다양한 이유가 있으며 유니크한 값으로 꼭 PK를 만들자.

 

그리고 PK에서 숫자형, 문자형은 그때그때 상황에 따라 맞춰쓰자.

728x90
LIST