조인 없이 한 테이블에 몰아넣으면
회원 정보가 주문 행에 흡수되어, 같은 사실을 여러 번 저장하게 됩니다.

문제는 조회가 아니라 저장입니다. 회원 1명에 대한 사실이 주문 수만큼 복제되면, 변경과 삭제 때 일관성이 함께 흔들립니다.

한 줄에 회원 + 주문을 함께 저장 합본 테이블은 주문이 늘수록 회원 정보도 같이 복제됩니다.

김철수가 주문 2건을 가지면 회원 이름과 이메일도 2행에 반복됩니다. 회원 자체를 대표하는 고정된 한 행이 사라집니다.

user_id name email 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 정보도 소실