4. 관계
개념: 엔터티간의 연관성
관계 정의 시 인스턴스 간의 논리적인 연관성을 파악하며 정의
종류
1. 존재적 관계: 하나의 엔터티의 존재가 다른 엔터티의 존재에 영향을 미치는 관계, 엔터티 간의 연관된 상태 의미
2. 행위적 관계: 엔터티 간의 어떤 행위가 있는 것을 의미
* ERD에서는 존재관계와 행위관계를 구분하지 않음
관계의 구성
1. 관계명
2. 차수(카디널리티)
3. 선택성(옵셔널리티)
관계의 차수 (카디널리티)
- 한 엔터티의 레코드(인스턴스)가 다른 엔터티의 레코드(인스턴스)와 어떻게 연결되는지를 나타내는 표현
주로 1:1, 1:N, N:M 등으로 표현
1:1
완전 1대1 관계: 하나의 엔터티에 관계되는 엔터티가 반드시 하나로 존재
선택적 1대1 관계: 하나의 엔터티에 관계되는 엔터티가 하나이거나 없을 수 있는 경우
1:N - 엔터티에 하나의 행에 다른 엔터티의 값이 여러 개 있는 관계
N:M - 두 엔터티가 다대다의 연결 관계를 가지고 있다
조인 시 카테시안 곱이 발생, 두 엔터티를 연결하는 연결 엔터티에 추가로 1:N 관게로 해소해야 한다.
관계의 페어링: 엔터티 안에 인스턴스가 개별적으로 관계를 가지는 것
관계와 차수, 페어링의 차이
학생 - 강의 엔터티는 관계를 갖는다.
한 학생은 여러 강의 수강 가능 <-> 한 강의도 여러 학생에게 수강 = N:M, 이 때 차수는 N:M
=> 관계의 차수는 하나의 엔터티와 다른 엔터티 간의 레코드 연결 방식을 나타냄
페어링은 두 엔터티 간의 특정 연결을 설명하고 추가 정보를 제공
5. 식별자
개념: 하나의 엔터티에 구성된 여러 개의 속성 중에 엔터티를 대표할 수 있는 속성
하나의 유일한 식별자가 존재해야한다. = 주식별자
식별자는 논리 모델링에서 사용, 물리 모델링에서는 키(Key)라고 표현
주식별자 특징
유일성: 주식별자에 의해 모든 인스턴스를 유일하게 구분
최소성: 주식별자를 구성하는 속성은 유일성을 만족하는 최소한의 속성으로 구성
불변성: 주식별자가 한번 특정 엔터티에 지정되면 그 식별자의 값을 변하지 않아야 한다.
존재성: 주식별자가 지정되면, 반드시 값이 존재, NULL 허용 X
식별자 분류
1. 대표성 여부
주식별자: 유일성, 최소성 만족하며 엔터티 대표
보조 식별자: 유일성, 최소성은 만족하지만 대표성은 만족 X. ex. 주민등록번호
2. 생성 여부
내부 식별자: 다른 엔터티 참조 X
외부 식별자: 다른 엔터티 참조 O (외래키) ex. 우편번호
3. 속성 수
단일 식별자: 하나의 속성으로 구성
복합 식별자: 2개 이상의 속성으로 구성
4. 대체 여부
본질 식별자: 비즈니스 프로세스에서 만들어짐 ex. 부서코드
인조 식별자: 인위적으로 만들어짐, 자동으로 증가하는 일련번호 같은 형태 ex. 주문번호(주문일자 + 주문순서 + 상품코드)
주식별자 도출 기준
1. 해당 업무에서 자주 이용되는 속성을 주식별자로 지정
- 같은 식별자 조건을 만족해도 업무적으로 더 많이 사용되는 속성을 주식별자로 지정
2. 명칭이나 내역등과 같은 이름 피하기
- 이름 자체를 주식별자로 사용하는 행위 피하기
3. 속성의 수를 최대한 적게 구성
- 속성의 수가 많으면 성능 느려짐
관계간 엔터티 구분
1. 강한 개체: 독립적으로 존재할 수 있는 엔터티 ex. 고객
2. 약한 개체: 독립적으로 존재할 수 없는 엔터티 ex. 계좌
식별 관계와 비식별관계
1. 식별관계: 하나의 엔터티의 기본키를 다른 엔터티가 기본키의 하나로 공유
식별관계는 ERD에서 실선으로 표시
2. 비식별관계: 강한 개체의 기본키를 다른 엔터티의 일반 속성으로 관계를 가짐
비식별관계는 ERD에서 점선으로 표시
6. 정규화
개념: 엔터티, 테이블 분해 // 최소한의 데이터만을 하나의 엔터티에 넣는 식으로 데이터를 분해하는 과정
데이터의 중복을 제거하고 데이터 모델의 독립성 확보, 데이터 이상현상을 줄이기 위한 기법, 상세화 과정은 논리 데이터 모델링 수행 시점에서 고려
정규화는 1~5까지 존재, 실질적으론 3까지만
이상현상: 정규화를 하지 않아 발생하는 현상(삽입, 갱신, 삭제)
삽입: 정의되지 않아도 될 속성까지도 입력되는 것
갱신, 삭제: 부서 정보만 삭제하면 되는데 관련된 사원 정보까지 삭제, 갱신
종류
1. 제1 정규화(1NF): 테이블의 컬럼이 원자성을 갖도록 테이블을 분해
* 원자성: 한 속성이 하나의 값을 갖는 특성
(하나의 행과 컬럼의 값이 반드시 한 값만 입력되도록 행 분리)
2. 제2 정규화 (2NF): 1NF를 진행한 테이블에 대해 완전 함수 종속을 만들도록 테이블 분해
* 완전 함수 종속: 기본키를 구성하는 모든 컬럼의 값이 다른 컬럼을 결정
PK가 2개 이상일 때 발생 PK의 일부와 종속되는 관계가 있다면 분리
완전 함수 종속을 위반하는 키를 찾아서 PK로부터 분리
3. 제3 정규화 (3NF): 2NF를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블 분리
* 이행적 종속성: A->B, B->C의 관계 성립 시, A->C가 성립
(A, B), (B, C)로 분리
4. BCNF 정규화: 모든 결정자가 후보키가 되도록 테이블을 분해
5. 제4 정규화 (4NF): 여러 칼럼들이 하나의 컬럼을 종속시키는 경우 분해하여 다중값 종속성 제거
6. 제5 정규화 (5NF): 조인에 의해 종속성이 발생되는 경우 분해
반정규화=역정규화: DB 성능 향상을 위해 데이터 중복 허용, 조인을 줄이는 DB 성능 향상 기법
* 비정규화: 정규화를 수행하지 않음
케이스
1. 종속성, 활용성은 향상 / 수행 속도가 느려질 경우
2. 다량의 범위를 자주 처리하는 경우
3. 특정 범위의 데이터만 자주 처리하는 경우
4. 요약/집계 정보가 자주 요구되는 경우
출처
https://www.youtube.com/@hongdatalab
홍쌤의 데이터 랩
홍은혜 강사
www.youtube.com