같은 사람의 정보가 여러 행에 퍼져 있으면, 행을 추가할 때는 중복이 늘고, 수정할 때는 값이 갈라지고, 삭제할 때는 회원 정보까지 같이 사라질 수 있습니다.
문제는 조회가 아니라 저장입니다. 회원 1명에 대한 사실이 주문 수만큼 복제되면, 변경과 삭제 때 일관성이 함께 흔들립니다.
김철수가 주문 2건을 가지면 회원 이름과 이메일도 2행에 반복됩니다. 회원 자체를 대표하는 고정된 한 행이 사라집니다.
| user_id | name | order_id | status | |
|---|---|---|---|---|
| 1 | 김철수 | kim@example.com | 101 | 배송 중 |
| 1 | 김철수 | kim@example.com | 102 | 결제 완료 |
| 2 | 이영희 | lee@example.com | 201 | 배송 준비 |
정규화된 구조라면 회원 정보는 한 곳에 한 번만 저장됩니다. 여기서는 주문을 보관하려고 할 때마다 회원 정보까지 다시 써야 합니다.
같은 사람의 정보가 여러 행에 퍼져 있으면, 행을 추가할 때는 중복이 늘고, 수정할 때는 값이 갈라지고, 삭제할 때는 회원 정보까지 같이 사라질 수 있습니다.
새 주문 1건은 주문 데이터만 늘리는 것이 아니라, 김철수의 이름과 이메일도 한 세트 더 복제합니다.
주문 2건 → 김철수 / kim@example.com 도 2세트 저장
이메일이 바뀌면 관련 주문 행을 모두 고쳐야 합니다. 하나라도 빠지면 같은 회원이 서로 다른 값으로 보입니다.
101행: kim@new.com 102행: kim@example.com → 같은 회원의 이메일이 둘로 갈라짐
이영희의 마지막 주문 행을 지우면 주문만 사라지는 것이 아니라, 회원 정보 자체를 보관하던 유일한 행도 함께 없어집니다.
DELETE order_id = 201 → 이영희 / lee@example.com 정보도 소실