공통 코드의 단순 설계
공통 코드 테이블에 필요한 최소한의 정보는 무엇일까? 코드값과 표시 이름이다.
DROP TABLE IF EXISTS common_code;
CREATE TABLE common_code (
code VARCHAR(50) PRIMARY KEY,
name VARCHAR(100) NOT NULL
);
INSERT INTO common_code (code, name) VALUES
('ORDER', '주문접수'),
('PAID', '결제완료'),
('SHIPPING', '배송중'),
('DELIVERED', '배송완료'),
('CANCEL','주문취소');
SELECT * FROM common_code;

- "code"를 PK로 사용한다.
Join 해서 결과 보기
select
o.order_id,
o.order_status,
c.name AS order_status_name,
o.total_amount
from orders o
join common_code c on o.order_status = c.code;

문제점 발견
그런데 여기서 문제가 발생한다. 회원 등급 코드도 공통 코드에 추가해보자.
INSERT INTO common_code (code, name)
VALUES ('NORMAL','일반회원'), ('VIP', 'VIP회원'),('VVIP', 'VVIP회원');
select * from common_code

- 주문 상태 코드와 회원 등급 코드가 섞여버렸다.
- 어떤 코드가 주문 상태이고, 어떤 코드가 회원 등급인지 구분할 수 없다.
- 더 심각한 문제는 코드값이 충돌할 수 있다는 것이다.
충돌 나는 코드 값
예를 들어 주문 상태가 아니라 결제 상태에도 "CANCEL" 코드를 사용하고 싶다면?
INSERT INTO common_code (code, name) VALUES
('CANCEL', '결제취소'); -- 주문취소와 코드가 중복!
- Error Code: 1062. Duplicate entry 'CANCEL' for key 'common_code.PRIMARY'
- 기본 키가 중복되어 입력이 실패한다.
- 이 문제를 해결하려면 코드를 그룹으로 분류해야 한다.
'데이터 베이스 > 설계 2편, 실무에서 반드시 마주치는 9가지 설계 패턴' 카테고리의 다른 글
| Ch01. 공통 코드 설계 - 그룹화 설계 (0) | 2026.07.10 |
|---|---|
| Ch01. 공통 코드 설계 - 공통 코드가 필요한 이유 (0) | 2026.07.10 |