💙 관계의 차수 (Cardinality)
- 한 엔터티의 레코드(인스턴스)가 다른 엔터티의 레코드(인스턴스)와 어떻게 연결되는지를 나타내는 표현
- 주로 1:1, 1:N, N:M 등으로 표현
1) 1 대 1 관계
* 완전 1 대 1 관계
- 하나의 엔터티에 관계되는 엔터티가 반드시 하나로 존재하는 경우
- ex) 사원은 반드시 소속 부서가 있어야 함
* 선택적 1 대 1 관계
- 하나의 엔터티에 관계되는 엔터티가 하나이거나 없을 수 있는 경우
- ex) 사원은 하나의 소속 부서가 있거나 아직 발령전이면 없을 수 있음
2) 1 대 N 관계
- 엔터티에 하나의 행에 다른 엔터티의 값이 여러개 있는 관계
ex) 고객은 여러 개 계좌를 소유할 수 있음.
3) M 대 N 관계
- 두 엔터티가 다대다의 연결 관계 가지고 있음
- 이 경우 조인 시 카테시안 곱이 발생하므로 두 엔터티를 연결하는 연결엔터티의 추가로 1 대 N 관계로 해소할 필요가 있음.
ex) 한 학생이 여러 강의를 수강할 수 있고, 한 강의 기준으로도 여러 학생이 보유할 수 있음.
=> 이 두 엔터티의 연결엔터티로는 구매이력 엔터티가 필요함
💙 관계의 페어링 (Cardinality)
- 엔티티 안에 인스턴스가 개별적으로 관계를 가지는 것
- 관계란 페어링의 집합을 의미함
** 관계와 차수, 페어링 차이
- 학생과 강의 엔터티는 관계를 가짐
- 한 학생은 여러 강의를 수강할 수 있고, 한 강의도 여러 학생에게 수강될 수 있으므로 M 대 N 관계이며, 이 때 차수는 M:N가 됨
- 인스턴스의 관계를 보면 "학생 A가 강의 B를 2023년 1학기에 수강했고 성적은 'A+'를 받았다"와 같은 특정한 페어링이 형성
- 이런식으로 관계의 차수는 하나의 엔터티와 다른 엔터티 간의 레코드 연결 방식을 나타내는 반면, 관계 페어링은 두 엔터티 간의 특정 연결을 설명하고 추가 정보를 제공하는 용도로 사용.
💙 식별자 개념
- 하나의 엔터티에 구성된 여러 개의 속성 중에 엔터티를 대표할 수 있는 속성을 나타냄
- 하나의 유일한 식별자가 존재해야 함
- 식별자는 논리 모델링에서 사용하는 용어. 물리 모델링에서는 키(key)라고 표현
ex) 학생 엔터티의 주식별자는 학생번호 속성 => 학생 테이블의 기본키는 학생번호 컬럼
(논리 모델링) (물리 모델링)
💙 주식별자 특징
1️⃣ 유일성 : 주식별자에 의해 모든 인스턴스를 유일하게 구분함
ex) 학생 엔터티에서 이름 속성은 동명이인이 발생할 수 있으므로 모든 인스턴스를 완벽하게 구분할 수 없으므로 학생번호와 같은 유일한 식별자를 주식별자로 사용
2️⃣ 최소성 : 주식별자를 구성하는 속성은 유일성을 만족하는 최소한의 속성으로 구성
ex) 학생 엔터티의 주식별자는 학생번호만으로 충분한데, 학생번호 + 이름으로 구성할 필요 없음
3️⃣ 불변성 : 주식별자가 한번 특정 엔터티에 지정되면 그 식별자의 값은 변하지 않아야 함
(항상 고유값으로 존재해야 함)
ex) 학생 엔터티에 주식별자인 학생번호가 때에 따라 변경되서는 안됨
4️⃣ 존재성 : 주식별자가 지정되면 반드시 값이 존재해야 하며 NULL은 허용 안 됨
💙 식별자 분류
1) 대표성 여부에 따른 식별자의 종류
| 주식별자 | 보조식별자 |
| * 유일성과 최소성을 만족하면서 엔터티를 대표하는 식별자 * 엔터티 내에서 각 인스턴스를 유일하게 구분할 수 있는 식별자 * 타 엔터티와 참조관계를 연결할 수 있는 식별자 |
* 엔터티 내에서 각 인스턴스를 구분할 수 있는 구분자지만, 대표성을 가지지 못해 참조 관계 연결을 할 수 없는 식별자 * 유일성과 최소성은 만족하지만 대표성을 만족하지 못하는 식별자 |
2) 생성 여부에 따른 식별자의 종류
| 내부식별자 | 외부식별자 |
| * 다른 엔터티 참조 없이 엔터티 내부에서 스스로 생성되는 식별자 | * 다른 엔터티와 관계로 인하여 만들어지는 식별자 (외래키) |
3) 속성 수에 따른 식별자 종류
| 단일식별자 | 복합식별자 |
| * 하나의 속성으로 구성 | * 2개 이상의 속성응로 구성 |
4) 대체 여부에 따른 식별자의 종류
| 본질식별자 | 인조식별자 |
| * 비즈니스 프로세스에서 만들어지는 식별자 | * 인위적으로 만들어지는 식별자 * 자동 증가하는 일련번호 같은 형태 |
ex) 👉🏻 부서코드 => 부서식별에 필요한 본질식별자
👉🏻 주문번호 => 주문일자 + 주문순서 + 상품코드 대신 만든 인조식별자
💙 식별자 표기법

💙 주식별자 도출기준
1) 해당 업무에서 자주 이용되는 속성을 주식별자로 지정한다.
- 같은 식별자 조건을 만족하더라도 업무적으로 더 많이 사용되는 속성을 주식별자로 지정
ex) 학생번호와 주민번호 중에 학생번호가 주식별자, 주민번호는 보조식별자
2) 명칭이나 내역등과 같은 이름은 피함
- 이름 자체를 주식별자로 사용하는 행위를 피함
ex) 부서명 보다는 부서코드를 부여하여 부서코드를 주식별자로 사용
3) 속성의 수를 최대한 적게 구성
- 주식별자를 너무 많은 속성으로 구성 시, 조인으로 인한 성능저하 발생 우려
- 일반적으로 7~8개 이상의 주식별자 구성은 새로운 인조식별자를 생성하여 모델을 단순화 시키는 것이 좋음
ex) 주문 엔터티에 대해 주문일자 + 주문상품코드 + 고객번호 + .... 등으로 구성 => 주문번호 속성 추가!
💙 관계간 엔터티 구분
1) 강한 개체
- 독립적으로 존재할 수 있는 엔터티
ex) 고객과 계좌 인터티 중, 고객은 독립적으로 존재할 수 있음
2) 약한 개체
- 독립적으로 존재할 수 없는 엔터티
ex) 고객과 계좌 엔터티 중, 계좌는 독립적으로 존재할 수 없음(고객에 의해 파생되는 엔터티)
'자격증 > SQLD' 카테고리의 다른 글
| SQLD(SQL-Developer) (6) (2) | 2024.10.28 |
|---|---|
| SQLD(SQL-Developer) (5) (2) | 2024.10.24 |
| SQLD(SQL-Developer) (4) (5) | 2024.10.18 |
| SQLD(SQL-Developer) (2) (4) | 2024.09.27 |
| SQLD(SQL-Developer) (1) (5) | 2024.09.24 |