관계형 데이터베이스(Relational Database)가 널리 사용되면서, 서로 연관된 데이터를 일관성 있고 효율적으로 관리하는 방법이 절실해졌습니다. 데이터는 여러 테이블에 나뉘어 저장되는데, 이를 연결할 수 있는 명확한 기준이 없다면 다음과 같은 문제들이 발생합니다:
- 동일한 데이터가 여러 테이블에 중복 저장되어 관리와 유지보수가 어려움
- 하나의 데이터를 수정하거나 삭제했을 때, 관련된 데이터가 함께 변경되지 않아 불일치(Inconsistency) 발생
- 테이블 간 관계가 불명확해져 데이터 분석이나 검색이 복잡해짐
이러한 문제를 해결하기 위해 PK(Primary Key)와 FK(Foreign Key) 개념이 등장했습니다.
- PK는 테이블 내 각 데이터를 고유하게 식별합니다.
- FK는 다른 테이블의 PK를 참조하여 테이블 간의 연결 관계를 명확히 표현합니다.
Primary Key 란?
PK는 한 테이블에서 각 행(레코드)을 고유하게 식별하는 열(column)입니다.
엑셀로 치면 ‘주민등록번호’처럼 행마다 중복되지 않는 고유 값이라고 볼 수 있습니다.
특징
- 고유성: 중복된 값이 있을 수 없습니다.
- NOT NULL: 반드시 값이 존재해야 합니다.
- 불변성: 되도록 변경되지 않아야 합니다.
실무에서 자주 사용되는 방식
- Auto Increment: 숫자가 1씩 자동 증가
- UUID (범용 고유 식별자): 충돌 가능성이 거의 없는 랜덤한 고유 값
Foreign Key 란?
FK는 한 테이블의 특정 열이 다른 테이블의 PK를 참조함으로써 두 테이블 간의 관계를 연결하는 키입니다.
예시
사용자 테이블 (users)
id | 이름 |
1 | 홍길동 |
2 | 김철수 |
게시글 테이블 (posts)
id | 제목 | user_id |
1 | 개발자 취업 방법 알려드려요! | 1 |
2 | 면접 후기 공유합니다 | 2 |
3 | TIL - 객체지향 | 1 |
→ posts.user_id는 users.id를 참조하는 FK입니다.
→ 이렇게 하면 어떤 사용자가 어떤 게시글을 작성했는지 쉽게 알 수 있습니다.
특징
- 데이터 무결성 보장: 존재하지 않는 사용자의 ID를 게시글에 넣는 것을 방지
- 관계 표현: 테이블 간 연결 구조를 명확하게 표현
- 데이터 중복 제거: 중복 없이 필요한 정보만 효율적으로 저장
'SQL' 카테고리의 다른 글
[SQL#2] 비교연산자와 논리연산자 (0) | 2025.04.16 |
---|---|
[SQL#1] SELECT / FROM / LIMIT (0) | 2025.04.16 |
[Database Modeling#4] 테이블 분리 규칙 (0) | 2025.04.15 |
[Database Modeling#2] 관계형 데이터베이스(RDBMS)란? (0) | 2025.04.15 |
[Database Modeling#1] 데이터베이스 모델링이란? (0) | 2025.04.15 |