관계란?
두 개 이상의 엔터티 간에 존재하는 연관성
단, 논리적인 연관성이 있어야하고, 바로 상위 관계여야한다. (논리적 연관성을 물리적으로 구현한 것이 “참조 무결성 제약”이다)
관계는 속성의 일부이다. = 실체가 존재한다 = 조인도 양쪽 속성이 존재해야 가능하다
관계선은 참조무결성 제약으로 생성해서 실체화한다.
*관계형 데이터베이스 핵심 원리
데이터 중복하지 않고,
한 군데서만 관리하기
필요할 때 연결(join)해서 보기
*참조무결성 제약
엔터티의 외래 식별자 속성 값은 참조되는 엔터티의 주 식별자 값과 일치하거나 NULL값이어야 한다
관계의 필요성
릴레이션은 조인해서 보면 되기 때문에 분해할 수 있을 때까지 분해한다. 이후 연결해서 사용하기 위해 관계가 필요하다.
관계선이 의미하는 것
업무규칙 : 종속관계, 참조관계로 구분하여 두 엔터티가 얼마나 밀접하게 연관됐는지 보여준다.
업무 프로세스 : 업무의 흐름을 의미한다.
조인 : 관계선은 데이터를 조회할 때 조인하는 경로
입력순서 : 상위->하위 엔터티 순서로 생성되니까 관계선으로 볼 수 있다.
어떤 관계를 설계해야할까? (세 가지 모두 만족)
속성으로 관리하려는 관계 : 관리하고자 하는 관계인지 따지고, 추출관계는 제외한다.
참조 무결성 관계 : 참조하는 데이터 간에 결점이 없는 것/ 참조한다(관계선으로 연결됐다)
참조 무결성 제약이 존재하면, INSERT – 상위 먼저/ DELETE – 하위 먼저
바로 상위의 1차 관계 : 바로 상위 엔터티 하나와의 관계만 관계선으로 표현해야 한다.
관계선 표현할 때
두 엔터티의 공통 속성인 식별자로 조인할 수 있는 경우에만
상위 엔터티의 한 개의 인스턴스가 하위 엔터티의 몇 개의 인스턴스와 연관이 있는지를 의미
관계비 특징
-관계를 분석하는 첫 단계
-관계비를 분석할 때는 업무적인 요건으로만 판단해야한다. : 특정 시점을 기준으로 하지 않고 발생할 수 있는 가능성을 보고 판단한다.
-이력데이터 제외하고 원천데이터만으로 분석해야한다.
관계비 종류
일대일(1 : 1), 일대다(1 : M), 다대다(M:M) 관계가 있다.
*최종 물리모델에서는 1:1과 1:M만 발생한다. 따라서 M:M관계는 두개의 1:M관계로 만들어야한다. 이 과정에서 교차 엔터티가 생긴다.
<일대일 관계>
통합 주의 : 성격이 구별되는 데이터 합치면 확장성이 떨어진다. 또한 엔터티 속성이 다른 엔터티 속성이라 생각하고 끝까지 고착될 가능성이 크다.
아래와 같은 일대일 관계는 데이터 본질이 같으므로 하나의 엔터티다.
속성 중에 묶을 수 있는 속성을 다시 엔터티로 도출하는 것은 일대일로 나누는 데 의미가 없다.
널 값을 포함한 속성이 있다면 그 속성만 분해하는 것도 고려할 수 있다. 단독으로 취득되거나 해당 데이터만 별도로 조회하는 요건이 있는 경우 일대일 관계의 별도 엔터티로 설계할 수 있다.
관계 속성과 엔터티
- 인스턴스 생성 시 필요 여부에 따른 분류
- 주 식별자 상속 방법에 따른 관계
두 개 이상의 상위 엔터티와 관계를 가지며 그 관계(상위 간)가 상호배타적일 때의 관계
배타 관계 특징
-> 통합되면 배타관계 발생x 단, 상위 엔터티의 성격이 다를 때는 통합할 수 없다.
배타 관계 속성으로 구현하는 방법
배타 관계 속성 관리 방법
1. 배타관계 속성을 개별적인 주 식별자로 관리
-> 관계없는 인스턴스에서는 기본 값 사용
3. 배타 관계 속성 중 하나만 주 식별자로 설계
4. 인조 식별자 사용
특정 인스턴스가 같은 엔터티의 다른 인스턴스와 관계를 가지는 관계
재귀 관계 발생할 때
1. 계층 데이터 관리할 때 – 종속관계와 유사
2. 자기 참조 데이터 관리할 때 – 참조관계와 유사
계층
계층 조직을 설계방법은 변화에 취약하다. 중간 계층이 없어지면 관리하기 모호해지는 모델이다. 계층 성격의 데이터는 본질적으로 가변적이기 때문에 재귀관계로 관리한다.
계층 관계 엔터티 판단 기준
: 여러 엔터티가 관리하는 속성이 유사하고, 엔터티 사이에 소속 개념이 존재
자기 참조
: 엔터티의 한 인스턴스가 자신의 엔터티에 존재하는 다른 인스턴스를 참조할 때
Ex) 정정주문 발생하면 원주문 재귀관계로 관리
잘못 설계한 관계선
엔터티 간에 연관성이 존재하는데 관계를 표현하지 않은 것
연관성이 없는데도 관계를 표현한 것
-> 모델 가독성 떨어지고 모델을 오해하게 만든다. 정합성 문제 우려
1) 1차관계 위반 모델
2) 참조 무결성 관계 위반 모델
3) 기타
- 주 식별자가 같을 때(참조 무결성관계x)
- 상속받은 관계 속성이 상위 엔터티 주 식별자 순서와 일치하지 않을 때
- 식별, 비식별로 분리해서 상속할 때
- 복합 주 식별자를 하나의 속성으로 변환해서 상속할 때
- NULL/Not NULL 혼용
- 원천, 백업 데이터 관계선 표현 ->안해야한다.
관계 검증
1. 관계 속성이 화면에 사용되었는지
2. 쿼리의 조인 구문을 분석해 관계선과의 매핑을 통해 검토하기
3. 고립된 엔터티, 일대일 관계, 양방향 관계나 순환 관계 별도로 검토
4. 배타 관계를 발생시킨 엔터티 통합할 수 있는지 검토
5. 관계선이 표현된 엔터티에 대해서 데이터 사이에 참조무결성제약이 있는지, 1차 관계인지 검토
6. Etc 검토,,
모델 복잡성 우선 – 관계선 생략
데이터 무결성 우선 – 관계선 생략X