정규화(Nomalization)이란?
DB 테이블 간 중복데이터를 허용하지 않는 것, 이를 통해 데이터 일관성과 무결성을 유지하고 최적화하기 위함
관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화(Normalization)라고 한다. 데이터베이스 정규화의 목표는 이상이 있는 관계를 재구성하여 작고 잘 조직된 관계를 생성하는 것에 있다. 일반적으로 정규화란 크고, 제대로 조직되지 않은 테이블들과 관계들을 작고 잘 조직된 테이블과 관계들로 나누는 것을 포함한다. 정규화의 목적은 하나의 테이블에서의 데이터의 삽입, 삭제, 변경이 정의된 관계들로 인하여 데이터베이스의 나머지 부분들로 전파되게 하는 것이다.
정규화의 목적
1970년 에드거 F. 커드에 의해 정의된 제 1 정규형의 기본적 목적은 1차 논리에 기반을 둔 "보편적 데이터 부언어"에 의해 데이터가 질의되고 조작되게 하기 위해서였다. (SQL이 이 데이터 부언어의 대표적인 예이지만, 정작 에드거 F. 커드는 이 언어는 심각한 결함을 가지고 있다고 생각하였다.)
에드거 F. 커드에 의해 정의된 제 1 정규화(1NF)의 목적은 아래와 같다.
1. 고려되지 않은 삽입, 갱신, 삭제 의존에서부터 관계의 집합을 배제한다.
2. 새로운 자료형이 나타날 때, 관계들의 집합의 재구성의 필요성을 낮추고, 그로 인하여 응용 프로그램의 생명주기를 연장한다.
3. 사용자에게 관계 모델을 더욱 의미있게 한다.
4. 관계들의 집합을 질의의 통계로부터 중립적이게 한다. 질의들은 시간이 지남에 따라 변경되기 때문.
—E.F. Codd, "Further Normalization of the Data Base Relational Model"
1) 제 1정규화
테이블의 칼럼이 하나의 값을 갖도록 테이블을 분해하는 것, 모든 속성 값이 원자 값을 갖도록 분해
다음과 같은 표준을 요구
- 각 테이블에서 중복을 제거한다.
- 각각 관계된 데이터 모임을 위하여 분리된 테이블을 만든다.
- 각각 관계된 데이터 모임을 기본키로 식별한다.
2) 제2 정규화
제1 정규화를 만족하고, 진행한 테이블에 대해 기본키가 아닌 속성이 완전 함수 종속을 만족하도록 테이블 분해, 완전 함수 종속은 기본키의 부분집합이 결정자가 되어서는 안 된다는 것을 의미
위 테이블의 경우 발생할 수 있는 문제점은 3가지이다,.
- 갱신 이상: 종업원과 근무지의 데이터가 중복되어 갱신 이상의 원인이 된다.
- 삭제 이상: 기술에 대한 정보를 삭제하면 근무지 정보를 소실한다.
- 삽입 이상: 근무지를 모를 경우 등록할 수 없다.
3) 제3 정규화
제2 정규화를 만족하고, 테이블 내의 모든 속성이 기본키에만 의존하며, 다른 후보키에 의존하지 않는다.
이행적 종속을 없애도록 테이블 분해, 속성이 기본키에 직접 종속(비이행 종속)하도록 분해
- 여기서 이행적 종속이란 이행적 함수종속은 기능적 종속으로 X ⟶ Y 이고 Y ⟶ Z 에 의해서 X ⟶ Z (X가 Z를 결정한다)가 되는 것이다.
- 갱신 이상:{우승자}, {우승자 생년월일}이 중복으로 나타나므로 갱신 이상이 발생할 수 있습니다.
- 삭제 이상: 특정 대회에 대해 삭제하면 우승자에 대한 생년 월일 정보를 소실합니다.
- 삽입 이상: 우승자의 생년 월일이 없는 경우 등록할 수 없습니다.
4) BCNF 정규화
제3 정규형을 만족하고, 관계형 데이터베이스의 릴레이션 R에서 함수 종속성 X→Y가 성립할 때, 모든 결정자 X가 후보키이면 BCNF 정규형이 된다. 즉, 식별자로 쓰이는 속성이 일반속성에 종속되지 않아야 한다. 제3정규화를 통해서도 제거되지 않은 데이터의 중복 문제를 해결해 주기 때문에 일명 ‘제3.5 정규화’라고도 부른다.
'Learning to code > 개발공부' 카테고리의 다른 글
HTTP 요청 메서드 (1) | 2023.08.24 |
---|---|
[에러해결]"Cannot destructure property 'user_id' of 'undefined' as it is undefined." (1) | 2023.08.23 |
MVC(Model View Controller) 란? (2) | 2023.08.22 |
NoSQL과 RDBMS의 특징과 차이점 (0) | 2023.08.16 |
내배캠 node.js_trello 프로젝트 kpt회고 (0) | 2023.08.14 |