[SQL] 관계 & 식별자
l 관계
관계의 정의: 인스턴스 사이의 논리적인 연관성으로 존재 또는 행위로서 서로에게 연관성이 부여된 상태
관계의 패어링
인스턴스가 개별적으로 관계를 가지는 것-> 패어링
이것의 집합을 관계로 표현한다
관계의 분류
1) 존재에 의한 관계
소속되어 있다, 존재의 형태에 대해 형성
2) 행위에 의한 관계
주문한다, 행위에 의한 관계 형성
관계의 표기법
관계 표기법에 대한 3가지 개념
1) 관계명(Membership): 관계 이름
2) 관계차수(Cardinality): 1:1 / 1:M / M:N
3) 관계 선택사항(Optionality): 필수, 선택
관계명
엔터티가 관계에 참여하는 형태 지칭
Ex) 포함한다, 소속된다
관계 시작점, 관계 끝점
참여자의 관점에 따라 관계 이름이 능동적, 혹은 수동적으로 명명된다.
è 주의점: 애매한 동사를 피함, 현재형으로 표현
관계차수
두 개의 엔터티 간 관계에서 참여자 수를 표현하는 것
관계 선택 사양
필수 참여 관계, 선택 참여 관계
참조 무결성의 제약 조건의 규칙이 이에 따라 바뀌므로 주의 깊게 모델링 해야 한다
관계의 정의 및 읽는 방법
관계 체크 사항
- 관심있는 연관 규칙이 존재?
- 엔터티 간에 정보 조합이 발생?
- 관계 연결에 대한 규칙이 서술되어있나?
- 관계 연결을 가능하게 하는 동사가 있는가
관계 읽기
읽는 방법:
관계에 참여하는 기준 엔터티를 하나, 각각 읽고 개수를 읽고, 관계 선택사양과 관계 명을 읽는다
l 식별자
식별자의 개념
è 엔터티를 구분 짓는 논리적인 이름, 대표할 수 이는 속성, 반드시 하나의 유일한 식별자가 존재
식별자의 특징
è 주 식별자에 의해 엔터티 내에 모든 인스턴스들이 유일하게 구분되어야 한다.
è 주 식별자를 구성하는 속성의 수는 유일성을 만족하는 ‘최소의 수’가 되어야 한다
è 자주 변하지 않는 것이어야 한다, 지정이 되면 반드시 값이 들어와야 한다
주 식별자의 특징
- 유일성
- 최소성
- 불변성
- 존재성
식별자 분류 및 표기법
식별자의 분류 체계
- 대표성 여부: 주식별자/보조식별자
- 스스로 생성 여부: 내부식별자/외부식별자
- 속성의 수: 단일식별자/복합식별자
- 대체 여부: 본질식별자/인조식별자
주식별자 도출기준
è 해당 업무에서 자주 이용되는 속성을 지정한다
è 명칭, 내역 등과 같이 이름으로 기술되는 것을 피한다.
è 복합으로 주식별자로 구성할 경우 너무 많은 속성이 포함되지 않도록 해야 한다.
식별자관계와 비식별자 관계에 따른 식별자
식별자 관계와 비식별자 관계의 결정
- 외부 식별자:
자기 자신의 엔터티에서 필요한 속성이 아닌, 다른 엔터티와의 관계를 통해 자식 쪽에 생성되는 속성
식별자 관계
자식 엔터티의 주 식별자로 부모의 주식별자가 상속되는 경우 null 값이 오면 안된다.
- 1:1 관계: 부모 상속받은 속성을 모두 사용
- 1:M 관계: 부모로 상속받은 속성, 다른 부모 엔터티에서 받은 속성, 스스로 가진 속성 포함 주식별자 관계
비식별자 관계
부모 엔터티로부터 속성을 받았지만, 자식 엔터티의 주식별자로 사용하지 않고, 일반 속성 사용
- 자식 엔터티에서 받은 속성이 반드시 필수가 아님, 부모없는 자식이 생성될 수 있음
- 엔터티별로 데이터의 생명주기를 다르게 할 경우
식별자로만 관계를 설정할 경우 문제점
è 주식별자의 속성이 지속적으로 증가함, 주식별자 증가시 오류 유발
비식별자로만 관계 설정시 문제점
è 속성이 자식 엔터티로 상속되지 않음
è 부모 엔터티까지 조인하는 현상 발생
è 불필요한 조인 많아짐, SQL 구문 길어짐, 성능저하
식별자와 비식별자 관계 모델링
1) 비식별자관계 선택 프로세스
관계 분석 -> 관계의 강약 분석 -> 자식테이블 독립(PK 구성) -> SQL 복잡도 증가, 개발 생산성 저하(이경우 PK 속성 단순화)
2) 식별자와 비식별자관계 비교
3) 식별자와 비식별자를 적용한 데이터 모델
'Undergraduate Records' 카테고리의 다른 글
[OS] 라즈베리 파이를 이용한 LED 제어 (0) | 2020.06.02 |
---|---|
[PL] interpreter 구현하기 (0) | 2020.05.29 |
[SQL] 엔티티 & 속성 (0) | 2020.05.27 |
[SQL] 데이터 모델링의 이해 (0) | 2020.05.27 |
[소소하게] 확통 강의 이수 (0) | 2020.05.27 |