정규화
- 데이터 정합성을 위해 엔티티를 작은 단위로 분리하는 과정이다.
- 정규화를 통해 조회성능은 처리 조건에 따라 향상될수도 저하될수도 있다.
- 입력, 수정 삭제 성능은 일반적으로 향상된다.
1. 제 1 정규형
- 모든 속성은 반드시 하나의 값만 가져야 한다.
V
- 제 1 정규형의 이상현상
- 삽입 이상 : 학생이 새 과목을 수강 신청할 때 반드시 학생의 학과와 지도교수를 알아야 한다.(불필요 정보)
- 삭제 이상 : 300번 학생이 C400 과목을 취소하면, 해당 과목에 대한 정보가 모두 사라진다.
- 갱신 이상 : 100번 학생이 지도교수를 변경할 때, P1인 행을 모두 찾아서 변경해야 한다.
- 제1 정규형의 이상현상 원인
- 기본키가 아닌 속성들이 기본키에 완전 함수 종속되지 못하고 부분 함수 종속되어 있기 때문이다.
- 학번, 과목번호가 기본키이고, 지도교수와 학과가 부분 함수 종속되어 있다.
2. 제2 정규형
- 제2 정규형은 제1 정규형이면서, 기본키에 속하지 않는 속성 모두가 기본키에 완전 함수 종속인 정규형이다.
- 엔티티의 모든 일반속성은 반드시 모든 주식별자에 종속되어야 한다.
- 일반 속성인 음료명이 기본키중 음료 코드에만 종속되어 있다. -> 2차 정규화
3. 제3 정규형
- 제3 정규형은 제2 정규형이면서 이행적 함수 종석성을 제거한 정규형이다
- 기본키가 아닌 모든 속성간에는 서로 종속될 수 없다.
- 일반 속성인 소속사명이 다른 일반 속성인 소속사 코드에 종속 -> 3차 정규화
반정규화(De-Normalization)
- 데이터의 조회 성능을 향상시키기 위해 데이터의 중복을 허용하거나 데이터를 그루핑하는 과정이다.
- 조회 성능은 향상될 수 있으나 입력, 수정, 삭제 성능은 저하될 수 있으며, 데이터 정합성 이슈가 발생할 수 있다.
1. 테이블 반정규화
- 테이블 병합
- JOIN이 필요한 경우가 많아 테이블을 통합하는 것이 성능 측면에서 유리할 경우 고려
- 1:M관계 테이블 병합의 경우 1쪽에 해당하는 엔티티의 속성 개수가 많으면 병합했을 경우 중복 데이터가 많아지므로 테이블 병합에 적절하지 못한다.
- 테이블 분할
- 테이블 수직 분할 : 엔티티의 일부 속성을 별도의 엔티티로 분할(1:1 관계 성립)
- 테이블 수평 분할 : 엔티티의 인스턴스를 특정 기준으로 별도의 엔티티로 분할(파티셔닝)
- 테이블 추가
- 중복 테이블 추가 : 데이터의 중복을 감안하더라도 성능상 반드시 필요하다고 판단되는 경우 별도의 엔티티 추가
- 통계 테이블 추가 , 이력 테이블 추가, 부분 테이블 추가
2. 컬럼 반정규화
- 중복 컬럼 추가 : JOIN이 필요한 경우가 많아 컬럼을 추가하는 것이 성능면서에 유리할 경우 고려한다.
- 파생 컬럼 추가 : 프로세스 수행시 부하가 염려되는 계산값을 미리 컬럼으로 추가하여 보관하는 방식
- 이력 테이블 컬럼 추가 : 대량의 이력 테이블을 조회할 때 속도가 느려질 것을 대비해 조회 기준이 될 것으로 판단되는 컬럼을 미리 추가해 놓는 방식
3. 관계 반정규화(중복관계 추가)
- JOIN이 필요한 경우가 많아 컬럼을 추가하는 것이 성능면서에 유리할 경우 고려한다.
'Database' 카테고리의 다른 글
SQL 기본(GROUP BY, HAVING, ORDER BY, JOIN) (0) | 2023.09.02 |
---|---|
SQL 기본 (SELECT, WHERE) (0) | 2023.08.19 |
SQL_데이터 모델링의 이해 (0) | 2023.08.12 |
[MySQL] 인덱스 스캔 방식의 종류 및 특징 (0) | 2023.03.28 |
[Database] 인덱스의 개념, 장단점 (0) | 2023.03.28 |