01. 정규화
: 데이터에 대한 중복을 제거하고 데이터가 관심사별로 처리되도록 엔터티를 쪼개 성능을 향상(조회/입력/수정/삭제 등)을 시키는 활동
단, 정규화가 대체로 좋은 것이며, 경우에 따라서는 반정규화(정규화의 반대)가 더 이득일 수도 있음
(반정규화: 중복을 포함하려고하고 엔터티를 합치는 과정임)
대부분 정규화를 거의하고, 특수한 사례에 대해서 반정규화를 진행함

정규화시 입력/삭제/수정(DML)은 (무조건)성능 향상! 조회는 성능 향상 속은 저하 될 수 있음
함수적 종속이란? F(X) = Y
: 정규화를 하기 위해 알아야 하는 개념으로 어떤 기준 값(컬럼(=속성))에 의해 데이터가 종속되는 현상을 의미함
만약 X가 Emp001이면 Y는 아이디 Emp001에 종속되는 유일한 인스턴스가 나옴
X: 결정자
Y: 종속자

ex) 결정자(아이디) -> 종속자(이름, 나이, 연봉, 부서ID, 부서명) : 아이디가 나머지 모든 컬럼을 함수종속한다.
ex) 결정자(부서ID) -> 종속자(부서명) : 부서ID가 부서명 컬럼을 함수종속한다.
정규화 과정 상세히 알아보기 (시험에 잘 나옴)

비정규형: 데이터가 중복이 되어있어서 정규화가 필요한 상태
도메인 원자성: 1차 정규화
1NF: 1차 정규화(도메인워자성 충족)를 통해 1차 정규형을 만들 수 있음
정규화(1차 정규화)
: 엔터티에서 다중 속성이 있거나 하나의 속성에 여러 속성값이 있으면 원자값(1개)으로 쪼개준다.
= 원자성을 확보하기 위한 활동
= 하나의 속성에 하나의 값을 가질 수 있도록 쪼개줌


정규화(2차 정규화)
: [1정규형 -> 2정규형(NF)] 형태로 엔터티를 변경하는 활동이다.
식별자에 부분 종속 하는 대상을 쪼개어 준다.

즉, 결정자 전부에 나머지 컬럼이 완전 종속하지 않고, 결정자 부분적으로도 종속한다면 쪼개야 한다.
*2차 정규화 푸는 팁*

1. 위에서 부분적 종속한다고 하는 것들을 따로 뜯어낸다. (결정자는 주식별자로)

2. 기존의 엔터티에서 학번이 가져간 일반속성을 제외하고 입력한다.

3. 기존의 데이터를 파악하여 관계를 설정한다.

정규화(3차 정규화) : 이행종속제거
엔터티에서 일반속성끼리 함수종속이 발생하면 쪼개준다.
이행종속:
직원 ID를 통해 부서 ID를 식별할 수 있고, 부서 ID를 통해 부서명을 식별할 수 있으면 이행종속이라고 함.

결정자(직원ID) -> 종속자(나머지 컬럼들) //완전함수종속! 2NF 만족
그런데 나머지 일반 컬럼중에서 결정자(부서ID) -> 종속자(부서명) 이 발생했음
이걸 쪼개줘야 함. 방법은 2차 정규화에서 했던 방식처럼 동일

반정규화(=역정규화)도 알아보자 (현재 시험 범위에서는 빠진것)
: 정규화한 데이터를 다시 합쳐서 중복되게 하거나 통합, 분리 등을 수행하는 모델링 방식
1. 테이블 반정규화 (테이블 병합, 테이블 분할, 테이블 추가 등)
2. 컬럼 반정규화 (중복컬럼, 파생컬럼, 이력테이블 컬럼 추가 등)
3. 관계 반정규화 (중복관계 추가)
정규화 vs 반정규화? = 성능 향상을 위해 진행함(조회를 할 경우 대부분 정규화 한 상태가 좋지만, 반정규화 상태에서도 좋을 수도 있음)



반정규화 대상 조사 방법(실무에서는 반정규화를 거의 안함)
(반정규화는 데이터의 무결성을 깰 위험이 있다. 그래서 가급적 다른 방법을 생각해보고 안되겠다 싶을때 한다. )
1. 반정규화가 필요한 대상을 찾아본다.
2. 다른 방법이 없는지 검토해본다.
3. 달리 방법이 없다면 반정규화를 적용한다.
- 1. 테이블 반정규화 (테이블 병합, 테이블 분할, 테이블 추가 등)
- 2. 컬럼 반정규화 (중복컬럼, 파생컬럼, 이력테이블 컬럼 추가 등)
- 3. 관계 반정규화 (중복관계 추가)
컬럼 반정규화
* 종류가 많으므로 대표적인 예시만 몇 개 소개한다.
(1) 중복컬럼 추가
- 테이블에 중복되는 컬럼을 추가해 조인을 감소시킨다.

두 엔티티 중에서 일부만 수정할 경우 데이터의 무결성이 깨질 위험이 있음, 따라서 반정규화는 거의 하지 않음
'DB > SQL 개발자 이론' 카테고리의 다른 글
| [1과목] 데이터 모델과 SQL - 03. 모델이 표현하는 트랜잭션의 이해 (0) | 2024.07.27 |
|---|---|
| [1과목] 데이터 모델과 SQL - 02. 관계와 조인의 이해 (2) | 2024.07.27 |
| 시험개요 (1) | 2024.07.23 |
| [1과목] 데이터 모델링의 이해 - 03-05장(관계, 식별자, 데이터 모델의 이해) (0) | 2024.07.23 |
| [1과목] 데이터 모델링의 이해 - 01-02장(엔터티(ENTITY)이해하기, 속성) (2) | 2024.07.23 |