본문 바로가기
🖊️Certificate/📌SQLD

[SQLD] 1과목 - 2장) 1절. 정규화

by 빛나고요 2024. 3. 5.
BIG

1과목. 데이터 모델링의 이해

2장. 데이터 모델과 SQL

1절. 정규화


# 정규화

- 하나에 엔터티에 많은 속성을 넣게 되면, 해당 엔터티를 조회할 때마다 많은 양의 데이터가 조회되기에 최소한의 데이터만을 하나의 엔터티에 넣는 식으로 데이터를 분해하는 과정
  ex) 학생 테이블에 이름, 학번 등의 데이터를 어디까지 넣을 것인가. 지도교수 정보가 학생 테이블에 들어가면 데이터의 중복이 발생하기 때문에 정규화를 통해 해소할 수 있음
- 데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 확보하기 위한 것
- 데이터의 중복을 제거하고 데이터 모델의 독립성을 확보
- 데이터 이상현상을 줄이기 위한 데이터베이스 설계 기법
- 엔터티를 상세화하는 과정으로 논리 데이터 모델링 수행 시점에서 고려됨
- 제 1정규화부터 5정규화까지 있지만 실질적으로는 제 3정규화까지만 수행함

# 이상현상

- 의미
  · 정규화를 하지 않아 발생하는 모든 현상
- 이상현상의 종류
  · 삽입이상
    ex) 사원 정보만 입력될 테이블에 부서 정보까지 입력되는 것
  · 갱신이상
  · 삭제이상
    ex) 사원 정보만 삭제하고 싶은데 부서 정보도 삭제되는 것

# 정규화 단계

제 1정규화(1NF) ➪ 모든 속성은 반드시 하나의 값을 가져야 함
- 테이블이 컬럼이 원자성(한 속성이 하나의 값을 갖는 특성)을 갖도록 테이블을 분해하는 단계
  ➪ 하나의 행과 컬럼의 값이 반드시 한 값만 입력되도록 행을 분리하는 단계

제 2정규화(2NF) ➪ 엔터틴의 일반 속성은 주식별자 전체에 종속이어야 함
- 제 1정규화를 진행한 테이블에 완전 함수 종속을 만들도록 테이블을 분해
* 완전 함수 종속
  · 기본키를 구성하는 모든 컬럼의 값이 다른 컬럼을 결정 짓는 상태
- 기본키의 부분 집합이 다른 컬럼과 1:1 대응 관계를 갖지 않는 상태를 의미함
  ➪ PK(Primary Key)가 2개 이상일 때 발생하며 PK의 일부와 종속되는 관계가 있다면 분리함
ex) 수강이력 테이블의 제 2정규화
   : 기본키(학생번호, 강의명)중, 강의명만에 의해 강의실이 결정됨 ➪ 완전 함수 종속성을 위배함(=부분 함수 종속성을 가짐) ➪ PK와 부분 함수 종속성을 갖는 컬럼을 각각 다른 테이블로 분해함(테이블이 1개에서 다수로 나뉨)
결과적으로 제 2정규화란, 완전 함수 종속을 위반하는 Key를 찾아 PK로 부터 분리하는 것임

제 3정규화(3NF) ➪ 엔터티의 일반속성 간에는 서로 종속적이지 않음
- 제 2정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분리
* 이행적 종속성
   · A ➪ B, B ➪ C의 관계가 성립할 때 A ➪ C가 성립되는 것
- (A,B)와 (B, C)로 분리하는 것(대체적으로 A는 PK임)
ex) 고객번호(A)가 상품명(B)을 결정하고 상품명(B)이 가격(C)을 결정하는 것은 고객번호(A)에 의해 가격(C)이 결정되기 때문에 이행적 종속 관계라고 할 수 있음 따라서 고객번호에 따른 상품명 테이블과 상품명에 따른 가격 테이블로 분리하는 것을 제 3정규화 한다고 말함.
결과적으로 제 3정규화란, 이행적 종속성을 띄는 Key를 찾아 서로 분리하는 것임

BCNF(Boyce-Codd Normal Form)정규화
- 모든 결정자가 후보키가 되도록 테이블을 분해하는 것(결정자가 후보키가 아닌 다른 컬럼에 종속되면 안됨)

제 4정규화
- 여러 컬럼들이 하나의 컬럼을 종속시키는 경우 분해하여 다중값 종속성을 제거

제 5정규화
- 조인에 의해 종속성이 발생되는 경우 분해

————————검정과목 변경으로 제외되었으나 필요한 지식이기에 정리함—————————

# 반정규화

- (=역정규화, De-Normalization)
- 데이터베이스의 성능 향상을 위해 데이터 중복을 허용하고 조인을 줄이는 데이터베이스 성능 향상 방법
- 시스템의 성능 향상, 개발 및 운영의 단순화를 위해 정규화된 데이터 모델을 중복, 통합, 분리하는 데이터 모델링 기법
- 조회(SELECT) 속도를 향상시키지만, 데이터 모델의 유연성은 낮아짐
* 비정규화는 정규화를 수행하지 않음을 의미함
☞ 정규화를 해서 분해를 했는데 너무 데이터가 세세하게 분리되서 결과를 도출할 때 합쳐야 하는 경우를 반정규화한다고 함

# 반정규화 수행 케이스

- 정규화에 충실하여 종속성, 활용성은 향상되지만 수행 속도가 느려지는 경우
- 다량의 범위를 자주 처리해야 하는 경우
- 특정 범위의 데이터만 자주 처리하는 경우
- 요약/집계 정보가 자주 요구되는 경우


댓글