매일 매일 미라클 코딩
SQLD 오답노트 (2) - 정규화 반정규화 본문
반정규화를 정의하면 정규화된 엔터티, 속성, 관계에 대해 시스템의 성능향상과 개발(Development)과 운영(Maintenance)의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법을 의미한다. 협의의 반정규화는 데이터를 중복하여 성능을 향상시키기 위한 기법이라고 정의할 수 있고 좀 더 넓은 의미의 반정규화는 성능을 향상시키기 위해 정규화된 데이터 모델에서 중복, 통합, 분리 등을 수행하는 모든 과정을 의미한다.
데이터 무결성이 깨질 수 있는 위험을 무릅쓰고 데이터를 중복하여 반정규화를 적용하는 이유는 데이터를 조회할 때 디스크 I/O량이 많아서 성능이 저하되거나 경로가 너무 멀어 조인으로 인한 성능저하가 예상되거나 칼럼을 계산하여 읽을 때 성능이 저하될 것이 예상되는 경우 반정규화를 수행하게 된다.
제1 정규형
각 속성이 원자값을 갖는 형태
단일키를 갖는 경우 자동으로 제 2 정규형 만족
제2 정규형
복합키(PK) 중 일부 속성에 의해 특정 속성이 결정되는 경우 (부분적종속) -> 테이블 분리를 통해 부분적종속 제거
제 3 정규형
- 테이블이 제2정규형을 만족
- 테이블 내의 모든 속성이 기본 키에만 의존하며, 다른 후보 키에 의존하지 않는다.
- 이행함수 종속이 존재 하지 않는다.
-> 기본키 외의 다른 속성은 종속관계를 가질 수 없다는 뜻
이행함수 종속: 속성X -> 속성 Y, 속성 Y -> 속성Z 와 같이 한 속성이 다른 속성을 결정하고, 그 속성이 또다른 속성을 결정
테이블 분리를 통해 이행함수 종속을 제거한다.
BCNF 정규화 (보이스코드)
- 복합키의 일부가 다른 속성에 종속되는 경우를 제거
- 복합키의 일부가 다른 속성'을' 결정하는 제 2정규형과 반대
1) BCNF를 위반하는 종속관계(특정 속성 -> 복합키 일부) 에 대한 테이블을 따로 만들고
2) 위 속성을 제외한 나머지 컬럼으로 테이블 구성하여 해결
'데이터베이스' 카테고리의 다른 글
SQLD 오답노트(6) - SQL 활용 (0) | 2022.09.03 |
---|---|
SQLD 오답노트 (5) - SQL 기본 및 활용 (0) | 2022.09.02 |
SQLD 오답노트 (4) - SQL 기본 및 활용 (0) | 2022.09.01 |
SQLD 오답노트 (3) - 데이터 모델과 성능 (1) | 2022.08.30 |
[Lv.3] 프로그래머스 - 헤비유저가 소유한 장소 (0) | 2021.06.29 |