태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

'1정규화'에 해당되는 글 2건

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

 

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

 

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



[그림 1]

 

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


 

[그림 주문정규화]

 

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

 

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


 

[그림 3]

 

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


 

[그림 4]

 

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


 

[그림 5]

 

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

 

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

 

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

 

블로그 이미지

블루퍼필

댓글을 달아 주세요

[그림1]은 다수의 관계 속성을 사용하는 방식과 관계 엔터티를 사용하는 방식의 특징을 설명한 표입니다.


 

[그림1]

 

일견 정규형 엔터티 방법이 일방적으로 좋아 보이나 앞서 밝혔듯이 가장 기본적인 판단 기준은 반복 속성의 개수와 속성이 늘어날 가능성을 염두에 두는 것입니다.

 

반복 속성도 적고 업무가 변경될 가능성이 없어 속성이 더는 늘어나지 않으며 성능 이슈가 존재하면, 정규형 엔터티를 채택하는 것이 바람직하지 않을 수 있습니다. 물론 일반적으로 관계형 데이터베이스에서는 반복 속성을 채택하는 방법보다 정규형 엔터티를 채택하는 것이 효율적입니다

 

또 다른 기준은 조회 요건입니다. 엔터티가 화면에 종속되는 것은 바람직하지 않지만 중요한 화면이 어떻게 구성됐는지에 따라 선택이 달라질 수 있습니다.

 

보험계약 당사자가 여러 명일 때 상세 화면에서 로우 형식으로 보여주면 보험계약당사자 엔터티를 사용해야 합니다. 반면에 보험계약 당사자를 보여주는 화면이 대부분 컬럼이 나열된 형식이라면 반복 속성을 사용하는 것이 효율적입니다. 물론 이때라도 성능 이슈가 없다면 관계 엔터티를 사용하는 것이 효율적일 것입니다

 

필자는 관계 엔터티에 대해서는 더욱 엄격한 정규형을 적용해야 한다고 생각합니다. 왜냐하면 관계는 자주 사용되는 속성이어서 수정하기 어렵기 때문입니다.

 

보험계약 엔터티와 같은 핵심 엔터티에 속성을 추가하고 관련 어플리케이션을 수정하는 것은 결코 쉬운 일이 아닙니다. 관계가 늘어날 가능성이 조금이라도 있다면 관계 엔터티를 채택하는 것이 바람직한데 미래의 업무 변화를 정확히 예측할 수 없으므로 유연하게 대비하는 것이 좋은 방법입니다. 다수 속성으로 관리하는 것보다는 하나의 엔터티로 관리하는 것이 더욱 유연한 모델입니다.

 

다수의 관계 속성으로 관리하는 방법과 하나의 관계 엔터티로 관리하는 방법은 1정규화와 동일한 개념입니다. 정규화 장에서 다시 설명할 것입니다.

 


블로그 이미지

블루퍼필

댓글을 달아 주세요