정규형 (Normalization)
: 관계형 데이터 모델에서 데이터의 중복성을 제거하여, 이상 현상 (Anomaly)을 방지하고, 데이터의 일관성과 정확성을 유지하기 위해 무손실 분해하는 과정
- 이상 (Anomaly)
: 정규화를 거치지 않은 데이터베이스 내에 데이터들이 불필요하게 중복되어 릴레이션 조작 시 발생하는 예기치 않은 현상
: 삽입 이상, 삭제 이상, 갱신 이상이 있음
- 정규화의 장점
: 중복 데이터를 최소화하여 테이블 불일치 위험이 줄일 수 있음
: 수정, 삭제 시 이상 현상을 방지함으로써 데이터 구조의 일관성을 개선할 수 있음
: 데이터 삽입 시 테이블 구조 변경을 최소화 할 수 있음
: 한 테이블의 데이터 용량을 줄일 수 있음
- 정규화의 단점
: 테이블 분리로 인해 테이블간 JOIN 연산이 많아짐
: 구조에 따라 질의에 대한 응답속도가 빨리지거나 느려질 수 있음
: 조인이 많이 발생하여 성능 저하가 발생하면 반정규화가 필요
- 정규화의 단계
: 제 1 정규형 ~ 제 5 정규형 (1NF ~ 5NF)
제 1 정규형 (1NF)
: 각 컬럼이 하나의 속성만을 가진다
: 하나의 컬럼은 같은 종류나 타입을 가진다
: 각 컬럼이 유일한 이름을 가진다
: 컬럼의 순서가 상관 없어야 한다
- 정규화 이전
- 정규화 이후
: 각 컬럼이 원자 값을 갖도록 테이블을 분리
제 2 정규형 (2NF)
: 제 1 정규형을 만족해야 한다
: 모든 컬럼이 부분 종속이 없어야 한다 (완전 종속을 만족해야한다)
※ 부분 종속 (Partial Dependency)
: 테이블의 특정 속성 (종속자)이 기본키가 아닌 다른 속성에 종속되는 경우
: 기본키가 여러 개일 때, 한 기본키에만 종속되는 속성이 있는 경우
※ 완전 종속 (Full Dependency)
: 종속자가 기본키에만 종속되며, 기본키가 여러 개일 때 모든 기본키 속성으로만 종속자를 알 수 있어야함
: 기본키의 부분집합이 결정자가 되어서는 안된다
- 정규화 이전
: 학생 번호와 과목이 기본키인데, 지도 교수의 경우 과목만 알면 알 수 있음
- 정규화 이후
: 과목과 지도 교수 정보를 다른 테이블로 분해하여 완전 함수 종속성을 이행
제 3 정규형 (3NF)
: 제 2 정규형을 만족해야 한다
: 기본키를 제외한 속성들 간의 이행 함수 종속이 없어야 한다
※ 이행 종속 (Transitive Dependency)
: 테이블에 X, Y, Z라는 3개의 속성에 대해 X > Y, Y > Z라는 종속 관계가 있을때 X > Z가 성립되는 경우
: X를 알면 Y를 알고, Y를 통해 Z를 알 수 있는 경우
- 정규화 이전
: ID를 통해 등급을 알 수 있는데, 등급을 통해서 할인율을 알 수 있다
- 정규화 이후
: 등급과 할인율에 대한 속성을 테이블로 분리하여 이행 함수 종속을 제거
보이스 코드 정규형 (BCNF, Boyce-Codd Normal Form)
: 제 3 정규형을 강화한 정규형
: 제 3 정규형을 만족해야 한다
: 모든 결정자가 후보키 집합에 속해야한다
※ 후보키 (Candidate Key)
: 각 행을 유일하게 식별할 수 있는 최소한의 속성들의 집합
: 기본키가 될 수 있는 후보로 유일성과 최소성을 동시에 만족해야함
※ 유일성
: 하나의 키로 특정 행을 바로 찾아낼 수 있는 속성
※ 최소성
: 키를 구성하는 속성들 중 꼭 필요한 최서한의 속성들로만 키를 구성하는 성질
- 정규화 이전
: 과목은 기본키지만, 과목 > 지도교수는 성립하지 않는다 (같은 과목을 다른 교수가 가르칠 수 있기 때문)
: 그러나, 지도교수 > 과목은 성립하게 되기 때문에 후보키 집합이 아닌 속성 (지도교수)가 결정자가 되어버린 상황
: 위 경우 제 3 정규형은 만족한다
- 정규화 이후
: 지도 교수와 과목에 대해 따로 테이블로 분리하여 해결한다
※ 보통의 경우 BCNF까지만 정규화를 수행한다. 그 이상의 정규화를 수행하면 정규화의 단점이 발생하기 때문 (테이블간 JOIN이 많아지는 문제)
제 4 정규형
: BCNF를 만족해야 한다
: 다치 종속이 없어야 한다
※ 다치 종속 (Multi-valued Dependency)
: 두 개의 속성이 1:N 관계로 대응하는 관계
: 독립적인 속성 X,Y가 있을때, X > Y 라는 종속성이 존재하는데 X는 단일 값인데 반해 Y는 다중 값인 경우
- 정규화 이전
: 학생번호는 단일 값인데 반해 과목과 취미가 다중 값을 가진다
- 정규화 이후
: 위 두 테이블은 여전히 다치 종속성을 가지지만, 2개 이상의 컬럼이 하나의 컬럼에 다치 종속되지 않기 때문에 제 4 정규형을 만족한다
제 5 정규형 (5NF, Project Join Normal Form(PJNF))
: 중복을 제거하기 위해 분해할 수 있을 만큼 전부 분해하는 것
: 제 4 정규형을 만족해야 한다
: 조인 종속이 없어야 한다
: 필요한 데이터가 사라지지 않는 무손실 분해가 되고, 불필요한 데이터가 생기지 않는 비부가적 분해가 된 릴레이션 (테이블)
※ 조인 종속 (Join Dependency)
: 한 테이블을 분해했다가 분해한 결과들을 다시 조인했을때 원래의 테이블과 동일한 경우
- 정규화 이전
: 위 테이블의 경우 개발자 > 자격증, 개발자 > 언어, 자격증 > 언어가 연관이 있으므로 제 5 정규형에 위배된다
: 위 테이블을 분해하고 다시 조인하면 원래 테이블로 돌릴 수 있기 때문에 조인 종속성이 존재한다 (더 분해할 수 있는 여지가 남아있다는 의미)
- 정규화 이후
: 위 상태의 경우 더 이상 분해할 수 없기 때문에 조인 종속성이 없으며 제 5 정규형에 만족한다
: 별다른 이점이 없어 잘 이용하지 않는 정규형
Reference
'Database > MySQL' 카테고리의 다른 글
MySQL 무결성 제약 조건과 참조 무결성 제약 설정 (0) | 2023.09.23 |
---|---|
MySQL 자동 증가와 주의점 (0) | 2023.09.23 |
관계형 데이터베이스 설계 (0) | 2023.08.27 |
MySQL JSON 데이터 다루기 (0) | 2023.08.13 |
MySQL 이스케이핑 방법 (0) | 2023.08.13 |