관계
관계
- 엔터티의 인스턴스 사이의 논리적인 연관성으로서, 존재의 형태나 행위로서 서로에게 연관성이 부여된 상태
- ex ) [강사]가 [수강생]을 가르친다.
관계의 패어링 (Paring)
- 패어링 : 엔터티 안에 인스턴스가 개별적으로 관계를 가지는 것
- 관계 : 패어링의 집합
- 관계 패어링 : 각 엔터티의 인스턴스들은 자신이 관련된 인스턴스들과 관계의 어커런스로 참여하는 형태
UML(Unified Modeling Language)
- 연간관계
- 존재적 관계, 실선으로 표현
- ex) DB팀에 만쥬사원이 소속되어 있다. => DB팀과 만쥬사원은 존재의 형태
- 의존관계
- 행위에 의한 관계, 점선으로 표현
- ex) 고객이 주문을한다. => 고객과 주문은 행위에 의한 관계
관계 표기법
관계명
- 엔터티가 관계에 참여하는 형태
- 관계시작점 : 관계가 시작되는 편
- 관계끝점 : 관계를 받는 편
- 관계 시작점과 끝점은 모두 관계 이름을 가져야 한다.
- 참여자의 관점에 따라 능동적이거나 수동적으로 명명된다.
- 애매한 동사는 피하고, 현재형으로 표현한다.
관계차수
- 두 개의 엔터티간에 관계에서 참여자의 수를 표현하는 것
- 1:1, 1:M, M:M
관계선택사양
- 필수참여관계 (Mandatory)
- 참여하는 모든 참여자가 반드시 관계를 가지는, 타 엔터티의 참여자와 연결이 되어야 하는 관계다.
- 선택적인관계 (Optional)
- 참여자가 반드시 관계를 가질 필요는 없는 관계다.
- 선택참여 하는 엔터티 쪽에 O를 표시한다.
- 필수참여는 아무런 표시하지 않는다.
- 0:0 관계가 된다면, 잘못될 확률이 많다.
식별자
식별자
- 엔터티 내에서 인스턴스들을 구분할 수 있는 구분자
- 하나의 엔터티에 구성돼 있는 여러 개의 속성중, 엔터티를 대표하는 속성을 의미
- 하나의 엔터티는 반드시 하나의 유일한 식별자가 존재해야 한다.
- Key와 동일하게 생각할 수 있지만, 키는 물리 데이터 모델링 단계에서 사용한다.
식별자 특징
- 유일성
- 주식별자에 의해 엔터티 내에 모든 인스턴스들을 유일하게 구분
- 최소성
- 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수여야 한다.
- 불변성
- 주식별자가 한 번 특정 엔터티에 지정되면 그 식별자의 값은 변하지 않는다.
- 존재성
- 주식별자가 지정되면 반드시 데이터 값이 존재한다.
- Null 안 된다.
식별자 분류 및 표기법
- 대표성 여부 : 자신의 엔터티 내에서 대표성을 가지는가
- 주식별자 : 엔터티 내에서 각 어커런스를 구분할 수 있는 구분자, 타 엔터티와 참조관계를 연결할 수 있는 식별자
- 보조식별자 : 엔터티 내 각 어커런스 구분은 가능하나, 대표성을 가지지 못해 참조관계 연결이 불가한 식별자
- 스스로 생성 여부 : 엔터티 내에서 스스로 생성되었는가
- 내부식별자 : 엔터티 내부에서 스스로 만들어지는 식별자
- 외부식별자 : 타 엔터티와의 관계를 통해 타 엔터티로부터 받아오는 식별자
- 속성 수 : 단일 속성으로 식별이 되는가
- 단일식별자 : 하나의 속성으로 구성된 식별자
- 복합식별자 : 둘 이상의 속성으로 구성된 식별자
- 대체 여부 : 원래 업무적 의미가 있던 식별자 속성을 대체해 새롭게 만든 식별자를 구분
- 본질식별자 : 업무에 의해 만들어지는 식별자
- 인조식별자 : 업무적으로 만들어지지는 않지만 원조식별자가 복잡한 구성을 가지고 있기 때문에 인위적으로 만든 식별자
주식별자 도출기준
- 해당 업무에서 자주 이용되는 속성을 주식별자로 지정한다.
- 명칭, 내역 등과 같이 이름으로 기술되는 것들은 가능하면 주식별자로 지정하지 않는다.
- 명칭이나 내역이 있고, 인스턴스들을 식별할 수 있는 다른 구분자가 존재하지 않을 경우는 새로운 식별자를 생성한다.
- 복합으로 주식별자로 구성할 경우 너무 많은 속성이 포함되지 않도록 한다.
식별자 관계와 비식별자 관계에 따른 식별자
- 외부식별자 : 다른 엔터티와의 관계를 통해 자식 쪽에 엔터티에 생성되는 속성으로, 데이터베이스 생성 시 Foreign Key 역할을 한다.
- 이 때, 자식 엔터티는 부모엔터티로부터 받은 외부 식별자를 자신의 주식별자로 이용할 것인지 || 부모와 연결이 되는 속성으로서만 이용할 것인지를 결정해야 한다.
식별자 관계 (Identifying Relationship)
- 부모로부터 받은 식별자를 자식 엔터티의 주식별자로 이용하는 경우
- Null 값이 오면 안되니, 반드시 부모 엔터티가 생성되어야 자식 엔터티가 생성되는 경우다.
- 부모로부터 받은 속성만으로 주식별자를 사용한다면, 부모와 자식 관계는 1:1 일 것이다.
- 부모로부터 받은 속성을 포함해 다른 속성과 함께 주식별자를 구성하면 1:M 관계다.
- 이처럼 자식엔터티의 주식별자로 부모의 주식별자가 상속되는 경우를 식별자 관계라고 한다.
비식별자 관계 (Non-Identifying Relationship)
- 부모엔터티로부터 속성을 받았지만, 자식엔터티의 주식별자로 사용하지 않고 일반적인 속성으로만 사용하는 경우다.
- 자식 엔터티에서 받은 속성이 반드시 필수가 아니어도 무방해, 부모 없는 자식이 생성될 수 있는 경우
- 엔터티별 데이터의 생명주기를 다르게 관리할 경우 (ex. 부모가 자식보다 먼저 소멸)
- 여러개의 엔터티가 하나의 엔터티로 통합되어 표현되었는데, 각각의 엔터티가 별도의 관계를 가질 때
- 자식 엔터티에서 별도의 주식별자를 생성하는 것이 유리하다고 판별될 때
식별자 관계로만 설정할 경우의 문제점
- 한개의 속성만을 PK로 가지는 엔터티가 자식, 자식의 자식, 그 자식의 자식에서 해당 속성을 물려줄 때, 1:M의 관계를 만들기 위해선 자식들은 부모 PK 개수 + 1 개를 PK로 가지게 된다.
- 식별자 관계만으로 연결된 데이터 모델은 주식별자 속성이 지속적으로 증가할 수 밖에 없는 구조다.
- 이렇게 주식별자속성이 많은 경우 JOIN 등을 할 때 누락을 하는 등 복잡성과 오류 가능성을 유발시킬 수 있는 요인이 될 수 있다는 것을 기억해야한다.
비식별자 관계로만 설정할 경우의 문제점
- 자식엔터티에서도 조회 조건으로 다수 사용되는 속성을 비식별자 관계로 설정할 경우, 자식 엔터티 데이터로 상속되지 않아, 데이터를 처리할 때 쓸데없이 부모 데이터까지 찾아가야 하는 경우가 발생한다.
- 즉, 불필요한 조인이 다량으로 발생하며 SQL 구문도 길어지고, 성증이 저하되는 현상이 발생된다.
===> 이 두가지 경우에 대해서 일정한 규칙을 가지고 데이터 모델링을 하는 기술이 필요하다. 이는 다음에 설명된다.
식별자관계와 비식별자관계 모델링
- 비식별자 관계 선택 프로세스
- 기본적으로 식별자 관계로 모든 관계가 연결되면서 다음 조건에 해당할 경우 비식별자 관계로 조정하면 된다.
- 관계의 강/약 분석 : 약한 관계
- 자식 테이블 독립 PK 필요 : 독립 PK 필요
- SQL 복잡도 증가, 개발 생산성 저하 : PK 속성 단순화
- 식별자와 비식별자 비교
식별자 관계 | 비식별자 관계 | |
목적 | 강한 연결관계 표현 | 약한 연결관계 표현 |
자식 주식별자 영향 | 자식 주식별자의 구성에 포함됨 | 자식 일반 속성에 포함됨 |
표기법 | 실선 표현 | 점선 표현 |
연결 고려사항 | - 반드시 부모 엔터티 종속 - 자식 주식별자 구성에 부모 주식별자 포함 필요 - 상속받은 주식별자 속성을 타 엔터티에 이전 필요 |
- 약한 종속관계 - 자식 주식별자 구성을 독립적으로 구성 - 상속받은 주식별자 속성을 타 엔터티에 차단 필요 - 부모쪽의 관계 참여가 선택 관계 |
'학교 > SQLD' 카테고리의 다른 글
[SQLD] 2.1 SQL 기본 (1) | 2024.12.19 |
---|---|
[SQLD] 1.2.2 조인 / 1.2.3 모델이 표현하는 트랜잭션의 이해 / 1.2.4 Null 속성의 이해 / 1.2.5 본질식별자 vs. 인조식별자 (0) | 2024.12.19 |
[SQLD] 1.2.1 정규화 (3) | 2024.12.18 |
[SQLD] 1.1.2. 엔터티 / 1.1.3. 속성 (0) | 2022.01.10 |
[SQLD] 1.1.1. 데이터 모델링의 이해 (0) | 2022.01.10 |