학교 다닐 때 정규화 배우긴 했는데 그때는 시험용으로 외우기만 하고 왜 하는지는 감이 안 왔거든요. 이번에 회사에서 테이블 설계할 일이 생겼는데 막상 하려니까 이걸 어디까지 쪼개야 하나 막막해서요.


일단 제가 이해한 게 맞나 확인 좀 부탁드려요. 예를 들어 주문 테이블을 이렇게 막 만들면요.

orders(주문id, 고객명, 고객전화번호, 상품명1, 상품명2, 상품명3, ...)


이런 식으로 한 행에 상품을 여러 칸으로 쭉 늘어놓는 게 1NF 위반이라고 알고 있는데 맞나요? 이걸 상품 하나당 한 행으로 풀어야 한다는 거죠.


근데 2NF랑 3NF 가면서부터는 진짜 모르겠어요. 부분 함수 종속이니 이행 함수 종속이니 하는 말이 나오는데 용어가 너무 딱딱해서 실제로 뭘 하라는 건지 와닿질 않습니다.


궁금한 거 정리하면요.

1. 정규화 하는 근본적인 이유가 그냥 중복 줄이려는 건가요? 아니면 다른 이득이 더 있나요?

2. 실무에서 보통 3NF까지만 하고 그 위(BCNF 이런 거)는 잘 안 한다는 게 맞나요?

3. 반대로 일부러 정규화를 안 하고 중복을 남겨두는 경우도 있다던데(반정규화라고 하나요?) 그건 또 언제 하는 건지 궁금해요.


이론이랑 실무 감각 사이를 어떻게 잡아야 할지 조언 부탁드립니다. 예시 들어주시면 정말 감사하겠습니다.