PK와 FK 차이 쉽게 이해하기: SQL 초보자가 가장 먼저 알아야 할 개념
SQL이나 데이터베이스를 처음 공부할 때 가장 자주 나오는 개념이 PK(기본키)와 FK(외래키)입니다. 그런데 이름은 익숙해도 둘의 역할 차이를 정확히 설명하기는 쉽지 않습니다. 결론부터 말하면 PK는 테이블에서 각 행을 고유하게 구분하는 기준이고, FK는 다른 테이블의 PK를 참조해서 테이블 간 관계를 연결하는 키입니다. 이 글에서는 SQL 초보자와 SQLD 준비생이 헷갈리지 않도록 PK와 FK 차이, 예제, 자주 하는 실수까지 한 번에 정리해보겠습니다.
- PK와 FK 차이를 말로 설명하면 헷갈리는 분
- SQLD를 준비하면서 데이터 모델링 개념이 막히는 분
- 테이블 관계를 처음 배우는 비전공자
- JOIN 개념이 아직 잘 안 잡히는 SQL 초보자
PK와 FK 차이를 한 줄로 정리하면
PK는 내 테이블에서 각 행을 구분하는 기준이고, FK는 다른 테이블과 연결하기 위한 참조 키입니다.
초보자가 헷갈리는 이유는 둘 다 “키”라는 이름이 붙어 있기 때문입니다. 하지만 역할은 분명히 다릅니다. PK는 “이 테이블 안에서 누가 누구인지 구분하는 기준”이고, FK는 “다른 테이블과 어떻게 연결되는지 보여주는 값”이라고 생각하면 이해가 빨라집니다.
PK란 무엇인가
PK는 Primary Key, 즉 기본키입니다. 하나의 테이블에서 각 행을 고유하게 식별하는 데 사용하는 값입니다.
예를 들어 회원 테이블이 있다고 가정해보겠습니다.
members
- member_id
- name
- email
여기서 member_id가 PK라면, 각 회원은 member_id로 구분됩니다.
이름이 같을 수는 있어도, member_id는 중복되면 안 됩니다.
PK의 핵심 특징
- 중복될 수 없다
- NULL이 될 수 없다
- 각 행을 고유하게 식별한다
즉, PK는 “이 데이터는 누구인가”를 정하는 가장 기본 기준입니다.
FK란 무엇인가
FK는 Foreign Key, 즉 외래키입니다. 다른 테이블의 PK를 참조해서 테이블끼리 관계를 연결하는 데 사용합니다.
예를 들어 주문 테이블이 있다고 해보겠습니다.
orders
- order_id
- member_id
- order_date
여기서 orders.member_id는 회원 테이블의 members.member_id를 참조할 수 있습니다.
이 경우 orders의 member_id는 FK가 됩니다.
즉, “이 주문이 어떤 회원의 주문인가”를 연결해주는 역할을 하는 것입니다.
FK의 핵심 특징
- 다른 테이블의 PK를 참조한다
- 테이블 간 관계를 만든다
- JOIN의 기준이 되는 경우가 많다
PK와 FK를 표로 비교하면 더 쉽다
| 구분 | PK | FK |
|---|---|---|
| 의미 | 기본키 | 외래키 |
| 역할 | 행을 고유하게 식별 | 다른 테이블과 연결 |
| 중복 가능 여부 | 불가 | 가능한 경우 있음 |
| NULL 가능 여부 | 불가 | 설계에 따라 가능 |
| 기준 | 내 테이블 내부 기준 | 다른 테이블 참조 기준 |
예제로 보면 PK와 FK 관계가 더 잘 보인다
아래처럼 회원 테이블과 주문 테이블이 있다고 해보겠습니다.
members 테이블
member_id (PK)
name
email
orders 테이블
order_id (PK)
member_id (FK)
order_date
이 구조에서는:
members.member_id는 회원을 고유하게 식별하는 PKorders.order_id는 주문을 고유하게 식별하는 PKorders.member_id는 어떤 회원의 주문인지 연결하는 FK
즉, FK가 있어야 주문과 회원을 연결해서 “누가 주문했는지”를 알 수 있습니다.
왜 FK가 있으면 JOIN이 쉬워질까
SQL에서 테이블을 연결할 때 JOIN을 사용합니다. 그리고 이때 가장 자주 기준이 되는 값이 FK입니다.
SELECT m.name, o.order_date
FROM members m
JOIN orders o
ON m.member_id = o.member_id;
여기서는 회원 테이블의 PK와 주문 테이블의 FK를 기준으로 두 테이블을 연결하고 있습니다. 그래서 FK는 단순한 숫자 칼럼이 아니라, 관계형 데이터베이스에서 테이블 관계를 보여주는 중요한 힌트입니다.
초보자가 PK와 FK에서 자주 하는 실수
PK와 FK를 둘 다 “중복 불가”라고 생각하는 것
PK는 중복되면 안 되지만, FK는 같은 값을 여러 행이 가질 수 있습니다. 예를 들어 한 회원이 여러 번 주문할 수 있으므로 orders 테이블의 member_id는 반복될 수 있습니다.
PK와 FK를 같은 테이블에서 같은 역할로 생각하는 것
PK는 “내 테이블 안에서 나를 구분하는 키”이고, FK는 “다른 테이블과 연결하는 키”입니다. 이름이 비슷해 보여도 역할은 분명히 다릅니다.
FK는 항상 NULL이 안 된다고 생각하는 것
PK는 NULL이 될 수 없지만, FK는 설계에 따라 NULL이 허용될 수 있습니다. 예를 들어 아직 연결 대상이 정해지지 않은 데이터라면 FK가 비어 있을 수도 있습니다.
비전공자는 이렇게 이해하면 쉽다
- PK = 주민등록번호처럼 “나를 구분하는 번호”
- FK = 가족관계증명서처럼 “다른 대상과 연결되는 정보”
- PK는 내 정체성을 보여주고, FK는 관계를 보여준다고 생각하면 쉽습니다.
SQLD 기준으로 PK와 FK를 왜 꼭 알아야 하나
SQLD에서는 데이터 모델링, 식별자, 관계, 정규화 같은 개념이 연결되어 나옵니다. 이때 PK와 FK 개념이 안 잡혀 있으면 테이블 관계를 설명하는 문제에서 자주 막히게 됩니다.
특히 아래 개념과 같이 묶어서 이해하면 좋습니다.
- 식별자
- 엔터티 간 관계
- JOIN
- 정규화
핵심 요약
- PK는 각 행을 고유하게 식별하는 기본키입니다.
- FK는 다른 테이블의 PK를 참조하는 외래키입니다.
- PK는 중복과 NULL이 허용되지 않습니다.
- FK는 테이블 간 관계를 만들고 JOIN의 기준이 되는 경우가 많습니다.
- 비전공자는 “PK는 내 기준, FK는 관계 기준”으로 기억하면 쉽습니다.
FAQ
PK와 FK 차이는 가장 간단히 어떻게 외우면 좋나요?
PK는 내 테이블에서 나를 구분하는 키, FK는 다른 테이블과 연결하는 키라고 외우면 가장 쉽습니다.
FK도 중복되면 안 되나요?
아닙니다. FK는 여러 행에서 같은 값을 가질 수 있습니다. 예를 들어 한 회원이 여러 주문을 할 수 있기 때문입니다.
PK는 왜 NULL이 될 수 없나요?
PK는 각 행을 고유하게 식별해야 하므로 값이 비어 있으면 기준 역할을 할 수 없기 때문입니다.
FK는 꼭 다른 테이블의 PK만 참조하나요?
기본적으로는 다른 테이블의 고유 식별 기준을 참조한다고 이해하면 좋습니다. 입문 단계에서는 다른 테이블의 PK를 참조하는 키라고 이해해도 충분합니다.
PK와 FK를 알면 JOIN도 쉬워지나요?
네. 어떤 값이 테이블을 연결하는 기준인지 보이기 때문에 JOIN 구조를 이해하기 쉬워집니다.
'자격증 준비 > SQLD' 카테고리의 다른 글
| 정규화 쉽게 이해하기: 1차·2차·3차 정규화 정리 (0) | 2026.03.11 |
|---|---|
| JOIN 종류와 차이 초보자용 정리: INNER JOIN, LEFT JOIN 쉽게 이해하기 (0) | 2026.03.11 |
| SQL 실행 순서 한 번에 이해하기: SELECT문을 읽는 기본 구조 (0) | 2026.03.10 |
| WHERE와 HAVING 차이 쉽게 정리: SQL 초보자가 가장 많이 헷갈리는 부분 (0) | 2026.03.10 |
| SQLD 독학 순서: 비전공자도 이해되는 공부 루트 정리 (0) | 2026.03.10 |