이번 포스팅에서는 The Enhanced E-R Model에 대해서 알아본다.
Enhanced E-R Model이란 기존 ER모델의 확장 및 추가 구성을 의미한다.
이 Enhanced E-R Model에서 가장 중요한 기능은 super type과 sub type 구성이다.
이 super type과 sub type이 왜 중요한지 다음의 예시를 통해 알아본다.
만약, 한 회사의 3가지 종류의 직원이 있다고 가정해보자.
시간제 직원은 EID, Name, Address, Hourly_rate 컬럼만 사용,
봉급 직원은 EID, Name, Address, Salary, Stock_option 컬럼만 사용,
계약 직원은 EID, Name, Address, Cotract_ID, Billing_rate 컬럼만 사용한다면, 공간의 낭비가 일어나게 된다.
하나의 테이블에 여러개의 컬럼이 있는데 이를 일부만 사용하기 때문이다.
이를 해결하기 위해 옵션2가 있다.
테이블을 3개로 쪼개보는 것인데, 각각의 직원의 타입에 따라 나눈 것이다. 이렇게 나눈다면 문제는 아니지만 중복이 일어난다. 예를 들어 EID는 모든 테이블에서 가지고 있는 컬럼인데 각각의 테이블 마다 EID 컬럼을 갖게 되는 것이 중복이다.
이를 해결하기 위해 옵션3이 있다.
옵션2에서 공통된 컬럼들을 하나의 super type인 employee에 넣고 나머지 컬럼들을 각각 subtype을 만들어 배치한다.
정리하자면 다음과 같다.
Supertype -> 하나, 혹은 하나 이상의 subtypes들을 갖는 일반적인 entity type이다.
Subtype -> 별도의 Attribute나 Relationship Type을 다른 그룹들과 구별하기 위한 Entity Type이다.
이를 이해하기 위해선 Specialization과 Generalization의 개념을 이해해야 한다.
Specialization -> SubType들은 SuperType의 전문화이다.
Generalization -> SuperType은 SubType들의 일반화이다.
SubType은 SuperType의 속성들과 관계를 상속받는다.
SubType의 Entity는 SuperType의 Entity이다.
SubType은 자신만의 고유한 Attribute를 가져야 한다.
예를 들어 이해를 해보자.
다음과 같은 구조에서 Out_Patient(외래 환자), In-Patient(입원 환자)는 모두 의사가 체크하기 때문에 공통된 SuperType에서 관계를 가진다. 하지만, Is Assigned관계는 입원환자만 침대가 몇개 할당되었는지 확인할 필요가 있으므로 SubType에서 관계를 가진다.
SuperType, SubType에서는 제약조건이 있다, Completeness Constraint이다.
Comleteness Constraint란 supertype의 entity가 반드시 적어도 하나의 subtype에 속해야 하는지의 여부를 의미한다.
맞다면 Total Specialization(두줄로 표현)이고 아니라면, Partial Specialization(한줄로 표현)이다.
이것도 마찬가지로 예를 들어 알아보자.
모든 환자는 Out_Patient(외래환자)이거나 In_Patient(내래환자)일 경우 다음과 같이 두줄로 표현하고 이를 Total Specialization이라고 한다.
모든 탈것은 Car, Truck뿐만 아니라 다른 것도 될 수 있는 경우(Taxi, Bus등)는 다음과 같이 한 줄로 표현하고 이를 Partial Specialization라고 한다.
또하나의 제약조건에 대해서 알아보자. Disjointness Constraint이다.
이는 SuperType의 인스턴스가 동시에 두개의 SubType에 속할 수 있는지의 여부를 의미한다.
Disjoint는 superType의 인스턴스가 subType들의 오직 하나에만 속할 경우 사용한다.
Overlap은 superType의 인스턴스가 subType의 하나 초과인 경우 사용된다.
예시를 통해 알아보자.
환자가 외래환자이면서 내래환자일 수는 없으므로 다음과 같이 d(disjoint)로 표시한다.
사람이 학생이면서 동문이면서 직원일 수 있으므로 다음과 같이 o(overlap)으로 표시한다.
ER Model을 만들 때 중요한 것은 ER Model이 완성도가 있고 일관성이 있는지 체크하는 것이다.
즉, Completeness Check와 Consistency Check과정을 가져아 한다.
Completeness Check란
1. 모든 Entity Type이 프라이머리키를 가져야 한다. -> Weak Entity Type은 Partial key가 있어야 한다.(Identifying Owner와 연결되어 있어야 한다.)
2. 모든 Entity Type은 적어도 하나의 Relationship Type을 가져야 한다. -> Entity가 떨어져 있다면 잘못된 ER 모델이다.
3. 모든 Relationship Type은 이름지어져야 한다.
4. Cardinality는 Relationship Type의 모든 엔티티 집합에 대해 주어져야 한다는 것이다.
Consistency Check란
1. 모든 Relationship Type은 Entity Type과 연결되어 있어야 한다.
2. 모든 Relationship Type은 unique한 이름을 가져야 한다.
3. 속성이름들은 unique해야 한다. -> Entity Type이나 Relationship Type에서 속성의 이름이 같으면 안된다.
4. Relationship Type은 두개가 연속해서 이어질 수 없다.
ER Modeling을 수행할 때는 Rule이 있다.
1. 한 ER Model에 이름이 같은 Entity Type이나 Relationship Type을 가질 수 없다.
2. 각각의 Entity Type은 하나 이상의 Attribute를 가져야 한다. 테이블에 Column이 없는건 가치가 없기 때문이다.
3. 일관성, 의사소통이 쉬운 표기법을 따라야 한다.
4. 요구사항들은 ERD에 있어야 한다.
5. ERD에 있는 것들은 요구사항에 있어야 한다.
6. 가정을 너무 많이 해선 안된다.
이번 포스팅에서는 The Enhanced ER Model에 대해서 알아보았다. 특히나 SuperType과 SubType은 JPA의 상속관계매핑과 비슷한 유형을 띄고 있는데, 이번 시간에 알아본 옵션들과 JPA의 단일테이블전략(옵션1), 구현 클래스마다 테이블 전략(옵션2), 조인 테이블 전략(옵션3)을 비교할 때 유용하게 이용할 수 있는 개념들이다.
그렇기때문에, 더 잘 알아두려고 노력하자!
'Dev > Database' 카테고리의 다른 글
[Database] 5. Physical Database Design (0) | 2022.02.25 |
---|---|
[Database] 4-2. Logical Database Design (0) | 2022.01.30 |
[Database] 4-1. Logical Database Design (0) | 2022.01.26 |
[Database] 2. Modeling Data in the Organization (0) | 2022.01.24 |
[Database] 1. The Database Environment and Development Process (0) | 2022.01.23 |