정규화란 데이터베이스의 설계를 재구성하는 기술로써, 불필요한 데이터(Redundancy)를 없앨 수 있으며, 삽입/갱신/삭제 시 발생하는 이상현상을 방지할 수 있다.
정규화의 기본 목표는 테이블 간에 중복된 데이터를 허용하지 않는 것이다. 중복된 데이터를 허용하지 않음으로써 무결성(Integrity)을 유지할 수 있다. * DB 저장 용량을 줄일 수 있다.
정규화된 결과를 정규형이라고 하며, 정규형은 기본 정규형, 고급 정규형으로 나뉜다.
정규형의 장점 :
정규형의 단점 :
* 데이터의 중복 속성을 제거하고 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약되므로 한 테이블의 데이터 용량이 최소화되는 효과가 있다. 따라서, 데이터를 처리할 때 속도가 빨라질 수도 있고, 느려질 수도 있다.
조인이 많이 발생하여 성능 저하가 나타날 경우, 반 정규화(De-Normalization)를 적용할 수도 있다.
이상현상이란? - 삽입이상 : 데이터 삽입 시, 의도와는 상관ㅇ벗이 원하지 않는 값들도 함께 삽입되는 현상 - 삭제이상 : 데이터 삭제 시, 의도와는 상관없이 다른 정보까지 연쇄적으로 삭제되는 현상 - 갱신이상 : 데이터 갱신 시, 의도와는 상관없이 데이터의 일부만 수정되어 일어나는 데이터 불일치 현상 |
릴레이션에 속한 모든 속성의 도메인이 더 이상 분해되지 않는 원자값으로만 구성되어야 한다.
제 1 정규형을 만족하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되어야 한다.
* 부분 함수 종속을 제거하고, 모든 속성이 기본키에 완전 함수 종속되도록 릴레이션을 분해
위 릴레이션에서 기본키는 학생번호, 강좌이름 으로 복합키이다. 기본키(학생번호, 강좌이름)은 성적을 결정하고 있다.
그리고 강의실 속성은 기본키의 부분집합인 강좌이름에 의해 결정될 수 있다.즉, 기본키(학생번호, 강좌이름) 의 부분키인 강좌이름이 결정자이기 때문에 위의 릴레이션의 경우 다음과 같이 기존의 릴레이션에서 강의실을 분해하여 별도의 릴레이션으로 관리한다.
제 2 정규형을 만족하고, 기본키가 아닌 모든 속성이 기본키에이행적 함수 종속이 되지 않아야 한다.
* 이행적 종속이란 : A -> B, B -> C가 성립할 떄, A -> C가 성립되는 것을 의미. |
위 릴레이션을 보면 학생번호를 알면 강좌이름을 알 수 있고, 강좌이름을 알면 수강료를 알 수 있다. 따라서 학생번호를 알면 수강료를 알 수 있다. 이것을 이행 종속성이 존재한다고 한다.
* 만약, 이행종속성이 존재하는 상태로 501번 학생이 수강하는 강좌가 스포츠 경영학으로 변경되었다면, 501번 학생을 스포츠 경영학을 20000원의 수강료를 내고 듣게 된다. 강좌이름에 맞게 수강료를 다시 변경할 수 있지만, 이러한 번거로움을 해결하기 위해 제 3 정규화를 한다.
제 3 정규형을 만족하고, 모든 결정자가 후보키가 되어야 한다.
위 릴레이션의 기본키는 학생이름, 강좌이름이다. 기본키는 교수를 결정하고 있고, 교수는 특강이름을 결정하고 있다.
그런데 문제는 교수가 특강이름을 결정하는 결정자이지만, 후보키가 아니라는 점이다. BCNF 정규형이 되려면 위 릴레이션을 분해해야 한다.
참고 :
https://mangkyu.tistory.com/110
[Database] 정규화(Normalization) 쉽게 이해하기
지난 포스팅에서 데이터베이스 정규화와 관련된 내용을 정리했었다. 하지만 해당 내용이 쉽게 이해되지 않는 것 같아서 정규화 관련 글을 풀어서 다시 한번 정리해보고자 한다. 1. 정규화(Normaliz
mangkyu.tistory.com
https://3months.tistory.com/193
데이터베이스 정규화 1NF, 2NF, 3NF, BCNF
데이터베이스 정규화 1NF, 2NF, 3NF, BCNF 데이터베이스 정규화란 데이터베이스의 설계를 재구성하는 테크닉입니다. 정규화를 통해 불필요한 데이터(redundancy)를 없앨 수 있고, 삽입/갱신/삭제 시 발
3months.tistory.com
https://code-lab1.tistory.com/48
[DB] 정규화(Normalization)란? 정규화 예시, 1NF, 2NF, 3NF, BCNF
정규화(Normalization)란? 정규화는 이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정이다. 이상현상이 존재하는 릴레이션을 분해하여 여러 개의 릴레이션을 생성하게 된다. 이를 단계
code-lab1.tistory.com
https://hongcoding.tistory.com/147
데이터베이스 정규화(Normalization)란
데이터베이스 정규화(Normalization) 란? 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화라고 한다. 정규화의 기본 목표는 관련이 없는 함수 종속성은
hongcoding.tistory.com
[데이터베이스] 리플리케이션(Replication) / 클러스터링(Clustering) (1) | 2023.04.13 |
---|---|
[데이터베이스] 정규화(Normalization) : 4NF, 5NF (0) | 2023.04.13 |
[MySQL] 여러 행 합쳐 출력하기(SQL Pivot) 개선 (0) | 2023.01.06 |
[MySQL] 여러 행 합쳐 출력하기(SQL Pivot) (0) | 2022.12.22 |
[mysql] ON UPDATE CURRENT_TIMESTAMP (0) | 2022.10.19 |