본문 바로가기

데이터 Story/모델링 매뉴얼

속성의 묶음이 반복된다면 정규화가 원칙

엔터티에 반복되는 속성은 정규화를 하는 것이 원칙이며, 특히 속성이 묶음으로 반복된다면 정규화를 한다.

 

단독 속성이 반복되면, 추가되지 않고 고정적인지를 고려해서 정규화를 하지 않을 수 있지만 묶음 속성이 반복되면 정규화를 하는 것이 원칙이다.

 

[그림 1] 모델은 주문상품에 대한 속성(상품번호/상품가격/상품수량)이 반복된 비정규형 모델이다.



[그림 1]

 

주문상품에 대한 속성인 상품번호, 상품가격, 상품수량 속성이 묶여서 세 번 반복됐기 때문에 비정규형 모델이다. 이 모델은 세 개의 속성이 묶여서 반복됐기 때문에 정규화를 해야 한다. [그림 2] 모델이 [그림 1] 모델에 대한 정규형 모델이다.


 

[그림 주문정규화]

 

정규화를 한 주문상품 엔터티는 주문과는 다른 의미를 나타내는 별도의 엔터티다. 즉 엔터티의 성격에 맞도록 엔터티가 도출된 것이다.

 

[그림 3] 년간상품주문집계 엔터티는 주문수량과 그에 대한 주문금액을 1월부터 12월까지 관리하는 엔터티다.


 

[그림 3]

 

위 모델도 수량과 금액이 묶음으로 반복됐기 때문에 [그림 4] 모델과 유사한 정규형 모델로 설계해야 한다.


 

[그림 4]

 

위와 같이 묶음으로 속성이 반복될 때는 [그림 1] 모델처럼 함께 관리되는 속성이 묶음이 되도록 표현하는 게 좋다. 아래 모델처럼 관리하면 가독성이 많이 떨어진다.


 

[그림 5]

 

위의 모델은 함께 관리되는 속성이 무엇인지 명확하지 않다. 예를 들어 상품번호 속성이 주문수량 속성과 별개로 반복되는 것으로 잘못 이해될 수도 있다. 같이 관리되는 속성은 같이 위치하도록 해야 가독성도 좋아지고 정규화하기도 좋다.

 

묶음 속성이 반복되면 반복 속성이 많아지는 것도 문제지만, 묶음 속성 값이 정확하게 관리되지 않을 가능성이 커지기 때문에 정규화하는 것이 원칙이다. 만약 [그림 1] 주문 엔터티의 상품번호 속성 값과 상품가격 속성 값이 쌍을 이루지 않는다면 데이터가 훼손된 것이다. 묶음 번호를 잘못 사용하거나, 묶음 속성이 떨어져 있거나 하는 이유로 잘못 사용할 가능성이 있다. 모델이 복잡해서 가독성이 떨어지는 것은 당연하다. 묶음을 이룬 속성의 개수가 많다면 이런 문제는 더욱 증폭된다.

 

기본적으로 속성이 묶음으로 관리된다는 것은 다른 성격의 데이터임을 의미한다. 원천 엔터티와 다른 성격의 데이터인데 종속 관계의 데이터라서 한 엔터티에서 관리해도 무난하게 보이는 것일 뿐이다. 묶음 속성이 반복되는 것은 바람직하지 않으므로 정규화를 해야 한다.