Projects/[Spring] Coffee Shop Project

[데이터베이스] 2. 식별 관계와 비식별 관계

montmer27 2026. 3. 27. 12:19

식별 관계 (Identifying) — 부모 없이는 자식이 존재 의미가 없는 관계. 자식의 PK가 부모의 PK에 종속. ERD에서 실선으로 표시

비식별 관계 (Non-identifying) — 자식이 독립적인 PK를 가지고, 부모 PK는 FK로만 참조하는 관계. 부모가 없어도 자식의 "식별자"는 독립적으로 존재. ERD에서 점선으로 표시

"부모 행이 삭제되면 자식 행은 의미를 잃는가?"
→ 식별 관계 / 아니오 → 비식별 관계

 

이번 프로젝트 스키마에 적용하면

 
 
식별 관계자식이 부모 없이 존재 의미 없음
 
비식별 관계자식이 독립적 PK 보유

orders → order_items : 식별 관계 (실선) order_items는 주문이 없으면 존재 자체가 의미 없음. "어떤 주문에 속한 항목인지"가 그 행의 본질

users → orders : 비식별 관계 (점선) 주문은 자신만의 id로 식별. 유저 계정이 탈퇴해도 주문 이력은 독립적으로 보존돼야 함 (환불, 세금 처리 등) user_id는 그냥 "누가 주문했냐"를 참조하는 FK

menus → order_items : 비식별 관계 (점선) menu_name, unit_price 스냅샷 덕분에 메뉴가 삭제되어도 order_items는 독립적으로 의미를 유지. menu_id FK:  "당시 어떤 메뉴였는지" 참조하는 정보

users → point_transactions, orders → point_transactions : 비식별 관계 (점선) 각 포인트 트랜잭션은 고유한 금융 이벤트로서 독립적인 id를 보유. 유저나 주문을 참조하지만, 그것들에 종속되어 식별되는 개념은 아님