DATOR


Unique 그룹집합 데이터모델


개체를 관리하는 마스터 집합들은 다양한 분류코드들이 존재한다.  특정한 비즈니스에서는 논리적인 관리용 그룹집합을 구성할 때 속성들의 특성 값을 이용하여 Unique Group 집합을 만들어야 할 때가 있다개체 데이터들의 상위 집합을 생성할 때 사람의 직관에 의해 생성하는 것이 아니라 시스템적으로 Value를 조사하면서 카테고리화(그룹핑) 하는 방법이다.  이 그룹핑 된 집합은 공통적인 속성(특징)들을 가지고 있기 때문에 원가계산, 상품분류, 생산공정, 제품조립 등에서 많이 활용되고 있다. 비즈니스 측면에서는 대량의 마스터 데이터별로 로직을 처리하는 것이 아니라 공통 속성을 지니는 소량의 그룹핑 집합별로 로직을 처리하고자 할 때 활용된다.

< 목적 >

  • 개체집합의 속성별로 유니크 한 논리 그룹집합(카테고리)을 생성한다.
  • 유니크한 논리 집합의 데이터 모델, 데이터 인스턴스를 살펴본다.

시나리오 >

  • 일반 쇼핑몰에는 다양한 상품들을 관리하고 있다.
  • 쇼핑몰 상품은 매우 다양하기 때문에 상품들의 상위집합을 상품의 특성을 이용하여 자동으로 관리하고자 한다.
  • 상품들은 기존에 진열을 위한 카테고리가 정의되어 있다. 진열 카테고리와는 다른 상품의 매출관리를 위한 새로운 그룹관리를 하고자 한다.

설명 1)

설명1.jpg

설명 1) 상품에 대한 카테고리와 해당 카테고리에 소속된 상품들이 지닐 수 있는 개별 속성들을 나타내고 있다. 매우 다양한 상품을 관리하기 때문에 카테고리마다 정의해야 하는 속성들이 다르게 나타난다.

상품을 분류하는 서브타입들이 많이 있을 것인데 여기서는 다루지 않는다.  비즈니스가 세분화 됨에 따라 상품의 판매를 예측하거나, 매출추이에 대한 또 다른 관점을 제공하고자 새로운 분류체계를 만들고자 한다.  이 분류체계에는 1개의 속성으로만 상품을 구분하지 않고 여러 개의 속성을 모아서 상품을 구분해야 한다.  1차원이 아닌 다차원으로 상품을 재 해석하려고 하는 것이다.  이를 위해 카테고리별로 다차원 분석에 사용 할 속성들을 지정하게 된다.

설명 2)

설명2.jpg

설명 2) 점퍼/바지, 도서, 컴퓨터 별로 새롭게 구성할 그룹에 사용할 속성후보를 도출하고 있다.  이렇게 선택된 속성들로 구성할 새로운 그룹집합을 아이템이라고 정의 하자. 카테고리별 속성의 그룹핑 집합이라고 할 수 있겠다

속성 pool브랜드, 계절, 나이, 분야, cpu, 제조사, 메모리 7개가 정의되어 있다.

이 개념은 실제 비즈니스를 바탕으로 하는 것이 아니라, 임의 개체 집합들에 정의된 속성을 바탕으로 재 그룹한 논리적인 집합을 만드는 것이 목적이기 때문에, 후보 속성이 적절한지는 논의 하지 않는다.  서로 다른 속성들로 아이템을 정의하려는 의도를 알아채기 바란다.

설명 3)

설명3.jpg

 

설명 3) 아이템이 어떻게 생성되는지를 보여 주고 있다.  점퍼와 바지류는 동일한 의류이기 때문에 아이템에 사용할 속성 pool이 동일하다.  의류는 브랜드별, 계절별, 나이별로 매출에 대한 기여도를 확인하는 것이 중요하다고 판단되었다. 

여기서 중요한 것은 해당 속성의 Value를 살펴보는 것이다.  Value의 조합이 Unique한 것이 특징이다.  브랜드 10, 계절 4, 나이대 10건이라고 가정하면 의류의 아이템 최대 수는 10*4*10 = 400건이 된다.  마찬가지로 도서의 아이템 수는 나이 10 * 분야 20 = 200 건이 된다. 아이템 후보에 사용되는 속성 수가 많고 속성의 Value수가 많다면 아이템 수는 엄청 많이 늘어 날 수 있겠다.  기존 아이템에 2건짜리 속성(디멘전)이 하나 추가되면 아이템 수는2배가 되는 것이다.

속성 Value의 조합을 Unique하게 구성하여 아이템번호를 채번하는 것을 기억해 두길 바란다. 간혹 사이트마다 이런 집합을 관리하는 테이블들이 있을 것이다.

설명 4)

설명4.jpg

설명 4) 상품과 아이템을 연결하고 있는 샘플 데이터를 보여 주고 있다. 먼저 데이터 건수를 보면 점퍼 10건이고 이에 해당하는 의류아이템 6건이다.  도서 7건이며 도서아이템 4건이다.  아이템은 속성을 group by 한 것과 동일한 건수로 만들어 지기 때문에 상품보다는 적은 건수를 지닌다.  아이템을 생성하는 시점은 1) 모든 속성의 경우의 수 만큼 미리 생성해 두거나 2) 상품의 추가, 상품 속성값의 변화가 발생될 때 생성 할 수 있을 것이다.

지금까지 정리한 설명을 바탕으로 데이터 모델을 작성해 보도록 한다. 

 

모델 1)

모델1.jpg

모델 1) 위에서 설명한 내용을 바탕으로 엔티티와 속성을 도출 하였다. “카테고리”, “상품엔티티는 키 엔티티가 되겠다.  상품에는 카테고리 별로 다양한 속성들이 구성되어 있다. 상품의 다양한 속성을 관리하는 방법은 여러 가지가 있는데, 여기서는 아이템의 구성을 이야기 하고 있기 때문에 속성관리는 그냥 컬럼 형태로 나열되어 있다고 가정한다.

아이템은 카테고리별로 구성 속성이 다르기 때문에 의류/도서/컴퓨터” 3개의 엔티티가 도출되었다.  아이템ID는 인조식별자이고, 개별 아이템마다 실질식별자가 다르게 구성되어 있다. 일반적으로 카테고리의 수는 많기 때문에 최종적인 아이템엔티티 모습은 통합이 필요할 것이라고 느낄 것이다.  사용되는 속성이 다르다고 분리하는 것은 적절치 못 할 수 있다. 같은 성질의 데이터이고, 주어진 역할이 동일한 엔티티를 분리하여 설계하면 많은 애로사항이 발생 할 것이다. 모델1)은 최종 모델을 완성하기 위한 준비 단계를 모델이라고 볼 수 있겠다.

모델 2-1)

모델2.jpg

모델 2) 통합된 모습의 아이템 엔티티이다. 통합을 하고 보니 아이템상품과의 배타 관계가 자연스럽게 사라져 버렸다.  아이템을 구성하는 실질 식별자는 카테고리별로 상이한데도 불구하고 통합되어 있다.  이처럼 집합을 구성하는 식별자 (PK)가 달라도 엔티티/테이블의 통합은 가능하다. 서브타입에 있는 속성들은 실제로는 아이템_1”처럼 속성이 나열된 형태와 동일한 모습이다. “아이템_1” 처럼 속성을 그대로 나열하면 아이템을 구성하는 실질 식별자를 표현 할 수가 없기 때문에 서브타입으로 표현해 둘 수 있다. 사실 카테고리가 굉장히 많다면 이런 속성표현을 모든 서브타입에 표현하기에는 무리가 있을 수 있다. 이때 이러한 규칙들을 엑셀로 정리해 두는 것도 좋은 방법이다. 

모델 2-1) 샘플 데이터

모델 2 샘플데이터.jpg

모델 2) “아이템의 샘플 데이터를 보면 점퍼일 때는 분야 속성이 null 값이고 도서일 때는 브랜드/계절 속성이 null 값이다. 카테고리 별로 사용하는 속성에만 값이 채워진다.

모델 2-2)

모델3.jpg

모델 2-2)아이템의 속성을 있는 그대로 나열한 형태이다.  서브타입에 표현되어 있던 카테고리별 아이템 속성을 관리하기 위한 카테고리별아이템속성엔티티가 추가 되었으며, 아이템을 구성하는 속성 pool집합을 관리하기 위해서 아이템속성이 추가 되어 있다.

여기서 우리는 논리적인 Unique 집합을 관리하기 위한 아이템 모델을 완성하였다고 종료 할 수가 있을 것이다.  그러나 뭔가 좀 찝질하다.  시스템을 운영하면서 카테고리별 아이템이 고정적이고 모든 속성들이 도출 완료 되었다면 현재 모델도 좋은 모델이 될 수 있다.

--

 

속성을 관리하는 방법에는 2가지가 있다.  첫째는 속성을 컬럼형태로 관리하는 것이고, 둘째는 속성을 Value() 형태로 관하는 것이다.  Value 형태로 관리되는 것의 가장 큰 장점은 유연성이 매우 좋다는 것이고 단점은 SQL작성이 번거롭다는 것이다.

이번에는 위의 모델을 Value 형태로 변형해 보자.

모델 3)

모델4.jpg

모델 3)아이템아이템구성속성으로 분리된 모델이다.  아이템을 구성하는 속성들이 Value로 정의되어 있기 때문에 모델만 보아서는 무슨 엔티티인지 알기 어렵다.  아이템구성속성의 PK를 살펴보자. “아이템ID + 속성ID + 속성값으로 정의되어 있다. 속성값이 PK에 포함되어 있다는 것이 핵심 포인트이다.  VALUEPK로 지정된 모델이다. Value의 구성이 Unique한 논리 집합이기 때문이다.

이 모델의 명확한 쓰임새를 알아보기 위하여 샘플 데이터를 작성해 보자.

모델 3) 샘플 데이터

모델 3 샘플데이터.jpg

 

모델 3은 샘플 데이터를 보아야 아이템의 구성을 알 수 있다.  아이템을 구성하는 속성값이 변경되면 새로운 아이템ID를 발생시켜야 한다. 속성을 구성하는 값의 Unique를 체크하기 위하여 조금 복잡한 로직이 추가 되어야 할 것이다.  상품이 어떤 아이템에 소속되는지 데이터를 연결하기가 만만치 않다.  데이터 검색 시 WHERE 브랜드 = ‘뱅뱅’ AND 계절 = ‘과 같은 SQL도 직접적으로 사용 할 수가 없다.  컬럼과 컬럼 값이 모두 Row형태로 관리되기 때문에 GROUP BY 형태로 테이블처럼 가공한 이후, 재 검색 해야 하는 SQL을 작성해야 한다.  좀 더 심도 깊게 모델을 이해하고자 하는 분들은 테이블을 직접 생성하고, 샘플 데이터를 입력하고, SQL을 작성해 보길 권한다.  SQL로 데이터를 마음대로 조작할 수 있을 때 완벽한 모델을 이해 할 수 있을 것이다.

특정 마스터 집합의 속성을 이용하여 Unique한 논리적 그룹집합을 재 생성하는 개념과 데이터 모델을 살펴 보았다. 

( 나중에 SQL을 별도로 작성해 봐야 겠다. 궁금할까? )

* 따뜻한 데이터 세상 만들기 - FROM 핫신 *
Tag :

Leave Comments