기술자료

DBMS, DB 구축 절차, 빅데이터 기술 칼럼, 사례연구 및 세미나 자료를 소개합니다.

권순용의 DB 이야기 : 서브셋과 수퍼셋

기술자료
DBMS별 분류
DB일반
작성자
dataonair
작성일
2015-01-06 00:00
조회
8698


◎ 연재기사 ◎


권순용의 DB 이야기 : 서브셋과 수퍼셋


권순용의 DB 이야기 : 인덱스의 핵심인 ROWID 이해


권순용의 DB 이야기 : ROWID 이용


권순용의 DB 이야기 : 인덱스란 무엇인가


권순용의 DB 이야기 : SQL 작성 시 ROWID 이용


권순용의 DB 이야기 : SQL 작성 시 ROWID 활용


권순용의 DB 이야기 : 인덱스 종류 이해


권순용의 DB 이야기 - B*TREE 인덱스의 이해


권순용의 DB 이야기 : B*TREE 인덱스의 고려사항과 비트맵 인덱스


권순용의 DB 이야기 : 비트맵 인덱스의 변경과 생성


권순용의 DB 이야기 : 리버스 키 인덱스의 개념



권순용의 DB 이야기

서브셋과 수퍼셋



데이터 모델링의 핵심 중 하나인 엔티티(Entity)는 서브셋(Subset)과 수퍼셋(Superset)이라는 두 개념을 가지고 있다. 서브셋과 수퍼셋은 모델링의 견고성에 영향이 큰 만큼 이를 이해한다는 것은 무척이나 중요하다. 이 글에서는 서브셋과 수퍼셋의 특징을 살펴보고, 예제를 통해 좀 더 깊이 이해해 보자.

서브셋 엔티티의 의미는 무엇일까 우선 서브셋 엔티티의 정의에 대해 살펴보자. 계좌 엔티티에 개인 계좌 데이터와 법인 계좌 데이터가 저장된다고 가정하자. 해당 엔티티는 개인 계좌와 법인 계좌라는 2개의 서브셋을 가지게 된다. 이처럼 데이터가 어떤 특정 성격에 의해 구분 가능한 경우 해당 엔티티를 서브셋 엔티티라고 부른다. 이러한 서브셋 엔티티는 다음과 같은 특징을 가진다.

tech_img1863.png

<그림 1> 여러 개의 서브셋을 가지는 엔티티의 특징



● 서브셋 엔티티은 2개 이상의 독립적인 서브셋으로 구성해야 한다.

서브셋을 구성할 때에는 교집합이 존재하지 않는 2개 이상의 독립된 형태로 구성해야 한다.


● 서브셋 간에는 공통된 속성(Attribute)과 관계(Relationship)가 있다.

서브셋은 동질성을 가진다. 따라서 유사한 속성으로 구성된다. 유사한 속성을 가지기 때문에 다른 엔티티와도 유사한 관계를 가진다.


● 각각의 서브셋은 속성과 관계를 가질 수 있다.

각각의 서브셋은 다른 속성과 관계를 가질 수도 있다. 이처럼 상이한 속성과 관계가 많은 경우 엔티티 분할을 고려할 수 있다.


● 서브셋 사이에 중복된 데이터가 없어야 한다.

만약 데이터가 중복된 경우 이에 대한 해결이 필요하다. 서브셋간 교집합이 성립할 때 문제가 발생할 수 있기 때문이다. 그러므로 서브셋을 정의할 때 교집합 또는 또 다른 서브셋으로 분리해야 한다.


● 서브셋과 서브셋 간에는 부모 자식 관계가 존재하지 않는다.

하나의 엔티티에 존재하는 서브셋의 경우 부모 자식 관계가 성립하지 않는다. 예컨대 계좌 엔티티에 개인 계좌 서브셋과 법인 계좌 서브셋이 있다고 가정하자. 과연 어떤 서브셋이 부모 서브셋이 돼야 하는가 이 둘은 어떠한 관계도 없다. 이처럼 서브셋과 서브셋 사이에는 부모 자식 관계가 존재할 수 없는 것이다.


● 구분 속성 필요(불분명한 서브셋인 경우 기타로 표시)

여러 개의 서브셋으로 구성된 엔티티는 구분 속성으로 관리해야 한다. 그렇지 않을 경우 하나의 엔티티에서 서로 다른 서브셋을 구분할 수 없다. 서브셋은 구분 속성으로 구별 가능하다. 불분명한 서브셋인 경우 구분 속성을 기타로 표시한다.


서브셋과 수퍼셋

서브셋들이 각각의 엔티티로 구성돼 있는 경우 수퍼셋으로 엔티티를 통합할 수 있다. 이 경우 각각의 서브셋을 구별하기 위한 구분 속성이 필요하다.

tech_img1864.png

<그림 2> 수퍼셋



예컨대 정규직 엔티티, 아르바이트 엔티티, 계약직 엔티티가 서로 분리돼 있다고 가정하자(<그림 2> 참조). 해당 엔티티들은 유사한 속성을 가졌다면 사원 엔티티를 하나의 수퍼셋으로 구성할 수 있다. 이 경우 하나의 엔티티에 모든 데이터가 저장되기 때문에 구문 속성을 도출해 구별해야 한다. 만약 유사 엔티티를 통합할 경우 SQL이 더욱 간단해질 것이다.


하나의 수퍼셋으로 구성된 엔티티는 필요에 따라 각각 서브셋을 별도의 엔티티로 분리할 수 있다. 이처럼 서브셋을 별도의 엔티티로 도출하면 엔티티 분할에서 언급했듯 유연성이 높아지지는 이점이 있지만 SQL이 복잡해질 수 있다. 수퍼셋과 서브셋의 특징은 다음과 같다.

tech_img1865.png

<그림 3> 엔티티의 서브셋을 별도의 엔티티로 분리한 예

tech_img1866.png

<그림 4> 서브셋과 수퍼셋의 특징



● 베타적

서브셋들은 서로 교집합이 존재하면 구현이 어렵고 복잡해진다. 만약 서브셋들이 베타적일 뿐 아니라 교집합까지 있을 경우 교집합 자체를 하나의 서브셋으로 도출할 수 있다.

● 서브셋은 하나의 수퍼셋에 포함됨

서브셋은 하나의 수퍼셋에만 포함돼야 한다. 만약 서브셋이 여러 개의 수퍼셋에 포함될 경우 이는 엔티티 도출이 잘못될 가능성을 높인다. 즉 중복된 데이터가 존재할 가능성이 높다.

● 구분 속성 필요

하나의 엔티티로 구성된 수퍼셋에서 필요에 의해 서브셋 데이터만 추출해야 할 경우 해당 엔티티에는 구분 속성이 필요하다. 이 구분 속성을 통해 필요한 서브셋의 데이터만 추출할 수 있다.

● 서브셋의 깊이(Depth)는 1까지 구현

한번 구분한 서브셋을 다시 한번 서브셋으로 분리해서는 안 된다. 또한 하나의 수퍼셋은 한번만 서브셋으로 분리하고 구성해야 한다. 서브셋의 깊이가 깊어지면 구성이 복잡해지므로 해당 엔티티를 액세스하는 SQL 또한 복잡해지기 때문이다.

● 수퍼셋 : 서브셋 = 1:n

하나의 수퍼셋은 여러 개의 서브셋을 가질 수 있다. 만약 수퍼셋 : 서브셋 = 1:1이라면 서브셋 존재의 의미가 없다.



출처 : 마이크로소프트웨어 12월호

제공 : 데이터전문가 지식포털 DBguide.net