데이터 모델링/프리미엄 가이드 - 관계형 데이터 모델링
07. 엔터티(Entity)(2)
by Toddler_AD
2024. 11. 26.
7.2. 자립 엔터티와 종속 엔터티
- 엔터티는 자립 엔터티(Independent Entity, Dominant Entity)와 종속 엔터티(Dependent Entity, Subordinate Entity)로 구분할 수 있다.
- 이는 엔터티의 본질을 파악하는 데 도움이 되므로 이번 장에서 상세하게 설명할 것이다.
- 자립 엔터티는 다른 엔터티에 의존적이지 않고 스스로 존재하는 엔터티다.
- 주로 업무에서 중요하게 사용되는 상위 엔터티가 자립 엔터티다.
- 반면에, 종속 엔터티는 상위(부모) 엔터티가 존재하지 않으면 존재할 수 없는 엔터티다.
- 만약, 엔터티 B가 존재하려면 엔터티 A가 반드시 존재해야 하면 B는 A에 존재 종속(Existence Dependency)됐다고 한다.
- 이렇게 존재 종속 됐을때 자립 엔터티 A의 인스턴스가 삭제되면 관계되는 종속 엔터티 B의 인스턴스도 반드시 삭제되어야 한다.
- 예를 들어, 과목 엔터티는 자립 엔터티라고 볼 수 있으며, 강의 엔터티는 종속 엔터티라고 볼 수 있다.
- 과목 엔터티는 부모 엔터티 없이도 독립적으로 존재할 수 있지만,
- 강의 엔터티는 과목 엔터티에 존재 종속됐으므로 과목 엔터티 없이는 존재 할 수 없다.
- 자립 엔터티와 종속 엔터티는 비즈니스에 따라 달라질 수도 있다.
- 즉, 비즈니스에서 관리하는 데이터의 범위에 따라 자립 엔터티가 종속 엔터티가 될 수도 있고 종속 엔터티가 자립 엔터티가 될 수도 있다.
- 특정 대학의 교수 데이터를 관리할 때는 교수 엔터티가 자립 엔터티가 되겠지만,
- 전국의 대학에 소속된 교수 데이터를 관리하는 업무라면 교수 데이터가 대학 데이터에 종속될 수도 있어 교수 엔터티는 종속 엔터티가 된다.
- 대학 데이터가 존재하지 않으면 교수 데이터는 존재하지 않을 것이기 때문이다.
[그림1] 자립 엔터티
- 반면에 [그림1] 고객 엔터티는 종속 엔터티가 아니다.
- 직업 엔터티가 부모 엔터티인 것처럼 보이지만 직업 엔터티가 없어도 고객 엔터티는 존재할 수 있으므로 고객 엔터티는 종속 엔터티가 아니라 자립 엔터티다.
- 직업 엔터티의 주 식별자인 직업번호 속성은 고객 엔터티에 주 식별자로 상속하지 않고 참조 데이터로서 일반 속성으로 상속하여 관리한다.
- 이렇게 직업 엔터티와 같이 참조되는 엔터티를 부모 엔터티라고 표현하지 않고 상위 엔터티라고 표현한다.
- 존재 종속 관계가 있어야 부모 엔터티라고 표현하며 일반적의 상위(부모)엔터티라고 표현한다.
- 자립 엔터티와 종속 엔터티는 때에 따라서 달라질 수 있어 상황에 따라 정의해야 한다.
- 자립 엔터티와 종속 엔터티를 판별하는 것으로부터 엔터티에 대한 분석이 시작된다.
- 종속 엔터티에는 몇 가지 형태가 있다.
- 첫 번째는 부모 엔터티의 일부로서 추가적인 데이터를 관리하는 예다.
- 주로 1정규화에 의해 생성된 엔터티나 이력 데이터를 관리하는 엔터티가 종속 엔터티가 된다.
- 두 번째는 다대다(M:N) 관계에서 발생한 엔터티로, 다대다 관계가 두 개의 일대다(1:M) 관계로 표현되면서 종속 엔터티가 생긴다.
- 이를 교차 엔터티(Association Entity, Relationship Entity, Intersection Entity)라고 한다.
- 세 번째는 슈퍼타입과 서브타입의 관계에서 종속 엔터티가 생긴다.
[그림2] 성격이 동일한 종속 엔터티
- 첫 번째 예제는 [그림2]와 같다.
- 상품 가격 데이터를 별도로 관리하는 엔터티가 존재하면, 상품 가격은 상품이 존재하지 않는 한 존재할 수 없는 데이터이므로 상품가격 엔터티는 종속 엔터티다.
- 종속 엔터티의 주 식별자는 부모 엔터티의 주 식별자를 식별자로서 상속하면서 종속 엔터티 자체의 식별자인 부분 주 식별자(Partial Primary Identifier)와 함께 구성하는 예가 대부분이다.
- 상품가격 엔터티의 주 식별자는 부모 엔터티의 주 식별자인 상품번호 속성과 상품가격 엔터티의 부분 주 식별자인 기준일자 속성으로 이루어진다.
[그림3] 1정규형 종속 엔터티
- 반복적인 속성이 있는 [그림3] 왼쪽 엔터티의 1정규형은 오른쪽과 같다.
- 오른쪽 모델에서 주문상품 엔터티는 종속 엔터티다.
[그림4] 일대일 관계의 종속 엔터티
- 그리고 [그림4] 왼쪽 모델과 같이 고객 엔터티의 속성이 많을 때 자주 사용되지 않는 속성들을 별도의 엔터티로 관리할 수 있다.
- 오른쪽 모델에서 고객상세 엔터티는 고개 엔터티의 종속 엔터티다.
- 일대일(1:1) 관계이므로 부모 엔터티의 주 식별자를 그대로 상속해 사용하는 게 일반적이다.
- 종속 엔터티가 많이 발생하는 형태 중에 다대다(M:N) 관계가 존재한다.
- 다대다(M:N) 관계는 관계형 데이터베이스에서는 존재할 수 없는 관계다.
- 일대일(1:1)이나 일대다(1:M) 관계와는 달리 물리적으로 구현할 수 없는 개념적인 관계다.
- 그러므로, 주로 개념 모델이나 초기 논리 모델에서 다대다 관계가 많이 도출된다.
[그림5] 종속 엔터티인 교차 엔터티
- [그림5]는 다대다(M:N) 관계에서 많이 발생하는 교차 엔터티(Association Entity)의 예제이다.
- 왼쪽의 다대다 관계는 오른쪽과 같이 일대다 관계로 만들어야 한다.
- 이렇게 일대다 관계로 만들어지는 교차 엔터티도 종속 엔터티의 일종이다.
- 교차 엔터티는 부모 엔터티 없이는 존재할 수 없는 엔터티이므로 자식 엔터티이며 종속 엔터티다.
- 교차 엔터티의 주 식별자는 [그림5] 모델과 같이 양쪽 부모 엔터티의 주 식별자를 상속해 사용하는 예가 대부분이다.
[그림6] 교차 엔터티가 여러개 존재하는 다대다 관계
- 다대다 관계는 [그림6]과 같이 교차 엔터티로 도출해도 다시 다다대 관계가 발생할 수 있다. 다대다 관계가 없어질 때 까지 교차 엔터티로 도출해야 한다.
[그림7] 서브타입의 종속 엔터티
[그림7] 서브타입의 종속 엔터티
- 종속 엔터티가 발생하는 또 다른 형태는 슈퍼타입과 서브타입이다.
- [그림7] 위의 슈퍼타입/서브타입 모델이 오른쪽과 같이 물리 모델로 변환되면 슈퍼타입인 고객 없이는 서브타입인 법인고객/개인고객은 존재할 수 없다.
- 따라서 법인고객과 개인고객은 종속 엔터티이며 주 식별자 역시 고객의 주 식별자를 상속해 사용한다.
- 마지막으로, 종속 엔터티의 식별(Identifying) 관계에 대해 언급할 것이다.
- 식별 관계는 상위(부모) 엔터티의 주 식별자를 하위(자식) 엔터티에서 주 식별자로서 상속받았을 때의 관계를 의미한다.
- 반면에 주 식별자로 상속받지 않고 일반 속성으로 상속받았을 때의 관계는 비식별(Non-Identifying) 관계라고 한다.
- 식별 관계와 비식별 관계는 주 식별자를 어떻게 상속받느냐와 관련 있다.
- 부모 엔터티에 존재 종속(Existence Dependency)된 종속 엔터티는 부모 엔터티의 주 식별자를 주로 식별 관계로 상속받지만 비식별 관계로 상속받을 수도 있다.
- 종속 엔터티라고 반드시 식별 관계로 상속받는 것은 아니다.
- 하지만, 식별 관계로 상속받은 엔터티는 상위 엔터티와 논리적으로 동일한 성격의 데이터거나 종속된 성격의 데이터라는 것을 의미한다.
- 위에서도 언급했듯이 종속 엔터티의 주 식별자는 주로 상속받은 부모 엔터티의 주 식별자에 부분 주 식별자(Partial Primary Identifier)를 추가해 만든다.
- 하지만, 종속 엔터티가 중요 엔터티이거나 하위(자식) 엔터티가 많을 때 주 식별자를 단순화하기 위해 인조 식별자를 채택할 수 있다.
[그림8] 종속 엔터티와 복합 주 식별자
- 예를 들어, 집주소/회사주소/근무지주소 등 다양한 주소를 관리하는 고객주소 엔터티는 종속 엔터티다.
- 고객 엔터티가 없다면 고객주소 엔터티는 존재할 수 없기 때문이다.
- 따라서, 고객주소 엔터티의 주 식별자는 [그림8]과 같이 고객 엔터티의 주 식별자인 고객번호와 고객주소 엔터티의 부분 주 식별자인 주소순번 속성을 합쳐 복합 주 식별자가 된다.
- 부분 주 식별자에 사용된 '~순번' 속성은 대부분 인조 식별자를 의미하므로 바람직하지 않다.
[고객9] 복합 주 식별자로 인한 복잡한 관계 속성
- 고객주소 데이터는 여러 엔터티에서 사용되므로 비록 두 개의 속성이지만 복합 주 식별자가 불편할 수 있다.
- 특히 한 엔터티에 여러 유형의 주소를 관리할 때 [그림9] 모델과 같이 고객주소 엔터티와 여러 개의관계를 가지게 돼 모델이 복잡해진다.
- 두 개의 관계를 관리하기 위해 수식어를 사용해 네 개의 속성이 생긴다.
- 고객번호는 같아서 하나만 사용하기도 하는데, 이는 참조 무결성(Reference Integrity) 제약을 생성할 수 없게 되며 모델의 왜곡이 발생해 바람직하지 않다.
[그림10] 인조 식별자를 사용한 종속 엔터티
- 따라서, [그림10] 모델과 같이 고객주소번호라는 인조 식별자를 채택해 고객주소 엔터티의 주소식별자를 단순하게 만들 필요가 있다.
[그림11] 인조 식별자 사용으로 단순해진 모델
- 주 식별자를 단순하게 함으로써 [그림11]과 같이 고객주소번호 속성만으로 관계선을 표현하면 모델이 단순해진다.
- 단순한 모델이 좋은 모델이라는 생각은 모델링을 수행하는 내내 염두에 두어야 한다.
- [그림10] 모델과 같이 고객주소 엔터티의 주 식별자를 인조 식별자로 채택하면 부모 엔터티의 식별자를 식별자로써 상속한 식별 관계가 아니다.
- 고객주소 엔터티는 고객 엔터티에 존재 종속된 종속 엔터티이면서 비식별 관계인 엔터티가 된다.
- 엔터티가 자립 엔터티인지 종속 엔터티인지를 아는 것은 중요하다.
- 데이터의 성격을 분명히 하기 위해서 데이터의 종속성은 중요한 요소다.
- 엔터티가 스스로 존재할 수 있는지 다른 엔터티가 존재해야만 존재할 수 있는지를 아는 것이 데이터의 성격을 파악할 수 있는 시발점이라고 할 수 있다.
- 데이터의 성격으로 종속성을 파악하기 어려울 때는 데이터의 사용 방법을 기준으로 종속성을 파악할 수도 있다.
- 종속 엔터티에 데이터를 생성할 때도 부모 엔터티에 데이터가 존재해야 하므로 데이터를 생성하는 순서도 명확해지는 등 자립 엔터티와 종속 엔터티를 구별하는 것은 여러 가지 측명에서 의미가 있다.
- 많은 CASE 툴에서도 자립 엔터티와 종속 엔터티를 달리 표현한다.
- 그 만큼 엔터티의 성격을 가름하는 요소 중 하나이므로 엔터티를 정의할 때 주의해서 살펴야 한다.