저장을 습관화
230818 TIL - RDBMS에서의 정규화 본문
정규화(正規化, normalization)란 어떤 대상을 일정한 규칙이나 기준에 따르는 '정규적인' 상태로 바꾸거나, 비정상적인 대상을 정상적으로 되돌리는 과정을 뜻한다.
RDBMS(관계형 데이터베이스 관리 시스템)에서의 정규화는 중복을 최소화하고 데이터의 일관성과 무결성을 유지하는 것이 목적이며, 주로 업데이트와 삭제의 이상 현상을 방지하고 효율적인 데이터 저장과 조회를 가능하게 한다.
정규화는 여섯 단계로 나뉜다.
제1정규화 - 각 속성(컬럼)이 원자값(atomic value, 하나의 값)을 갖도록 테이블을 분리한다.
예를 들어 '주문' 테이블에 데이터가 (orderId: 1 / Product: Laptop, Smartphone, Keyboard / Quantity: 2, 1, 3 / price: 800)과 같이 존재한다면, 이를 각 컬럼에 하나의 값만 존재하도록 나눈다. (orderId: 1 / Product: Laptop / Quantity: 2 / price: 800)
제2정규화 - 부분 종속 제거
제1정규형을 만족한 상태에서, 부분 종속성을 제거하여 완전 종속을 만족하도록 한다.
부분 종속이란 테이블 내의 기본키로 사용할 수 있는 속성이 2개 이상인 경우이며, 이들을 복합키라고 부른다.
완전 종속이란 기본키로 사용할 수 있는 속성이 단 하나이며 나머지 속성들이 기본키에 종속됨을 말한다.
예를 들어 '주문' 테이블에는 orderId, ProductId, customerId 등 외래키가 아니면서 기본키로 사용할 수 있는 속성들이 존재하지 않도록 여러 테이블로 나누어준다.
제3정규화 - 이행적 종속성 제거
제2정규형을 만족한 상태에서, 이행적 종속을 없애도록 테이블을 분리한다.
이행적 종속은 A -> B, B -> C가 성립될 때 A -> C도 성림됨을 뜻한다.
예를 들어 '강의'라는 테이블에 '학생 ID', '강의 번호', '강사', '강사 연락처'라는 속성들이 존재한다고 했을때, 속성 '강사'는 속성 '강의 번호'에 종속되고, 속성 '강사 연착처' 또한 속성 '강의 번호'에 종속되게 된다.
이러한 일이 일어나지 않도록 테이블을 '강의', '강사' 등으로 나눈다.
BCNF(Boyce-Codd 정규화) - 결정자이면서 후보키가 아닌 것 제거
보이스 코드 정규화는 제3정규형을 만족한 상태에서, 모든 결정자가 후보키가 되도록 테이블을 분해한다.
결정자(Determinant)는 테이블 내에서 다른 속성들의 값을 결정하는 속성을 말한다. 어떠한 속성이 다른 속성에 종속되어 있다고 할 때 그 종속되는 속성이 결정자가 된다. (ex. 학생 정보 테이블에서 강의 번호가 해당 강의를 담당하는 교수의 이름을 결정한다면, 강의 번호가 결정자가 된다.)
후보키(Candidate Key)는 테이블 내에서 각 행을 유일하게 식별할 수 있는 열(속성)들의 조합을 말한다. (ex. 학생 정보 테이블에서 학번과 주민등록번호가 모두 고유하게 식별할 수 있는 속성들이라면, 이 두 속성의 조합이 후보키가 될수 있다.)
제4정규화 - 다치 종속성 제거
제3정규형과 BCNF를 만족한 상태에서, 같은 테이블 내의 다른 후보키로부터의 종속성을 제거한다.
다치는 다중값, 값이 여러개라는 의미이다.
하나의 행(row)에 나열된 속성들은 서로 관련이 있어야 한다.
예를 들어 manageId, employee, license, language라는 속성들을 가진 테이블이 있다고 하자. 여기서 직원 A는 정보처리산업기사라는 자격증 보유하고 있으며 프로그래밍 언어 javascript를 다룰수 있다. 이후 직원 A가 프로그래밍 언어 typescript를 다룰 수 있게되어 DB를 갱신하려고 하나, 데이터를 추가하기 위해서는 자격증에 관한 내용도 등록하여야만 한다.
또 다른 경우 직원 B가 가지고 있던 어떠한 자격증이 만료되어 관리 테이블에서 삭제하여야하는데, 이럴 경우 직원 B가 다룰 수 있는 언어에 대한 내용도 제거하여야만 한다.
이러한 경우를 다치 종속성이라고 하며, 이를 제거하는 것이 제4정규화이다.
제5정규화 - 조인 종속성을 제거
PJNF(프로젝션 정규형)이라고도 한다.
제4정규형을 만족한 상태에서, 다른 테이블 간의 종속성을 제거한다.
예를 들어 A 테이블과 B 테이블을 join 했을때 그 결과가 A 테이블에 있던 속성값이과 B 테이블에 있던 속성값이 반복되어서 나오는 경우를 조인 종속성이 있다고 표현한다.
이러한 일이 일어나지 않도록 A 테이블과 B 테이블을 A, B, C, D... 등 최소한의 기본키와 최소한의 컬럼을 가지도록 잘게 쪼개다.
이렇듯 정규화 과정을 통해 데이터의 중복과 일관성, 무결성을 유지하고 수정 삭제 시의 이상 현상을 방지할 수 있다는 장점이 존재하지만 너무 과도한 정규화는 복잡성을 증가시키고 참조해야하는 테이블이 늘어남에 따라 연산시간도 길어져 성능이 저하될 수 있다는 단점 또한 존재한다.
[출처]
RDBMS 정규화(Normalization) - 1/2
정규화(Normalization)의 개념 정규화란 뭘까? 우리가 흔히 DB라고 알고 있는 RDBMS(Relational DataBase Management System)를 설계할 때, 중복을 최소화하면서 데이터 구조를 짜는 프로세스이다. 그렇다면 왜 중
epdev.tistory.com
https://mangkyu.tistory.com/110
[Database] 정규화(Normalization) 쉽게 이해하기
지난 포스팅에서 데이터베이스 정규화와 관련된 내용을 정리했었다. 하지만 해당 내용이 쉽게 이해되지 않는 것 같아서 정규화 관련 글을 풀어서 다시 한번 정리해보고자 한다. 1. 정규화(Normaliz
mangkyu.tistory.com
https://code-lab1.tistory.com/270
[DB] 제 4정규형과 제 5정규형, 4NF와 5NF
정규화란? 정규화는 이상현상(Anomaly)이 있는 릴레이션을 분해하여 이상현상을 없애는 과정이다. 이상현상이 존재하는 릴레이션을 분해하여 여러 개의 릴레이션을 생성하게 된다. 이를 단계별로
code-lab1.tistory.com
https://m.blog.naver.com/cmw1728/221270636239
5정규형
5정규형은 조인 종속이 없는 모델이다. 하나의 릴레이션을 무손실, 비부가적 분해하고 나서 다시 합쳤을 때...
blog.naver.com
'공부 > TIL' 카테고리의 다른 글
230821 TIL - HTTP 메소드란 (0) | 2023.08.21 |
---|---|
230819 TIL - Primary Key, Foreign Key (0) | 2023.08.19 |
230817 TIL - MVC 패턴이란 (0) | 2023.08.17 |
230816 TIL - RDBMS와 NOSQL의 차이 (0) | 2023.08.16 |
230808 TIL - 잘못 알고 있던 부분을 바로 잡았다. (0) | 2023.08.08 |