만족

[Database] Data Modeling (Patterns) 본문

[Database] Data Modeling (Patterns)

DataBase/이론 Satisfaction 2021. 6. 11. 04:21

이번에는 데이터 모델링 시 유용하게 사용할 수 있는 패턴들에 대해 알아볼 것이다.

Association Pattern

어떤 두 개체가 연관이 있기는 한데, 개체의 속성으로 추가하기에는 애매한 상황일 때 적용할 수 있다.

 

가령 음식 개체와 음식 제조 회사 개체가 있을 때,

모든 음식 제조 회사가 같은 음식을 만들 때 같은 가격과 같은 재료를 사용하지는 않는다.

 

이럴 경우 음식 가격과 음식 재료에 대한 정보를

회사 개체에 넣을 것인지, 음식 개체에 넣을 것인지가 애매해진다.

 

연관 패턴을 적용하면, 음식 가격/재료 속성을 포함하는 음식 제품이라는 새로운 개체를 만들고

음식 개체와 음식 제품 개체는 1:N 관계,

음식 제조 회사 개체와 음식 제품 개체가 1:N 관계를 갖게 만들 수 있다.

어떤 음식은 아예 제품으로 제조되지 않을 수도 있다. FoodProduct는 Food와 FoodCompany에 의존적이다.

 

Multivalued Attribute Pattern

다중 값 애트리뷰트에 적용할 수 있다.

 

예를 들어, attribute 타입에 array는 존재하지 않는데,

이를 특정 구분자로 단일 값 애트리뷰트를 묶어 집어넣게 되면

당장은 대충 땜질로 넘길 수 있을지라도, 나중에 테이블 규모가 커졌을 때 성능 저하로 엄청난 부담을 안게 된다.

 

예를 들어, 사람 개체가 있고 휴대폰 번호라는 애트리뷰트를 포함한다고 해 보자.

휴대폰 번호가 여러개일 수 있는데, 이 때 애트리뷰트에 010-0000-0000, 010-0000-0001처럼 넣게 되는 상황은 바람직하지 않다.

 

이런 다중 값 애트리뷰트를 새로운 하나의 개체로 만들고, 이 개체와 사람 개체를 1:N 관계로 만드는 것이 Multivalued Attribute Pattern이다.

휴대폰을 사용하지 않는 사람도 있을 수 있다. 사람에게 할당되지 않은 휴대폰 번호가 있을 수 있다.

 Archtype/Instance Pattern

1:N관계의 두 개체에서, 하나의 개체(Archtype)의 속성들에 대해 다른 하나의 개체(Instance)가 Archtype의 속성을 모두 포함하고 다른 특징들을 Instance에서 결정할 때 적용 가능하다.

 

예를 들어, 악기 개체와 악기 제품 개체가 있다고 해 보자.

 

악기 개체에는 악기의 이름과 악기의 종류(현악기, 관악기 등) 속성이 있고,

악기 제품 개체는 악기 개체의 속성을 그대로 포함하면서, 동일한 악기 개체 속성들에 대해 다른 값을 가질 수 있는 속성들을 포함한다.

(악기: 피아노/건반악기, 악기 제품 개체: (악기 개체 속성), 가격, 색 등)

 

이 경우 같은 악기 종류에 관해서는 악기 제품 개체가 모두 동일한 악기 이름과 악기 종류를 갖게 된다.

(어떤 피아노 제품도 관악기가 되지 않고 모두 건반악기 속성을 갖는다)

 

따라서, 악기 제품 개체에서 악기 종류 개체의 PK를 참조하게 함으로써

동일한 속성은 악기 개체로 분리하고 악기 제품 개체에는 다른 속성들만 명시할 수 있게 된다.

 

어떤 악기는 아예 제조되지 않을 수도 있다. 악기 제품은 악기 개체에 의존적이다.

Recursive Pattern

개체가 자기 자신과 Relation을 가질 수도 있다.

 

지하철을 상상해 보자.

 

지하철은 여러 개의 열차 칸들이 서로 연결되어 운행된다.

 

열차 칸이라는 객체가 있을 때, 그 객체의 prevRoom이라는 속성은 null을 갖거나 앞의 열차 칸 Id와 관계를 갖는다.

 

이 개체는 위와 같은 관계로 자기 자신을 참조한다.

 

열차의 머리 칸은 prevRoom이 null이 되어 더이상 참조할 칸이 없고

열차의 꼬리 칸 id는 더 이상 자신을 참조해줄 칸이 없게 되며

중간의 열차 칸은 어떤 열차의 칸을 반드시 하나 참조하기 때문이다.

 

 



Comments