본문 바로가기

CS/데이터베이스

DB 정규화

1. 정규화란?

관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스

데이터 중복에 의한 이상현상을 해소하는 과정

2. 정규화 종류

① 1정규형(1NF): 모든 속성은 반드시 하나의 원자값만 가져야 한다.

반복그룹(취미1, 취미2, 취미3)을 가지거나 다중값(축구, 게임, 독서)를 가진다. 이는 1정규형을 위배하는 것이다.

테이블을 분리하여 1:N 관계를 만들어 준다.

② 2정규형(2NF): 부분적 함수종속 제거, 모든 속성은 반드시 모든 기본키에 종속되어야 한다. 기본키 일부에만 종속X

점수는 기본키(강의번호+학번)에 종속적이다. 하지만 이름은 학번만으로도 종속적이다. 이는 2정규형을 위반한다.

새로운 학생을 추가하는 경우 점수에 null값이 들어간다→입력이상

강의를 삭제할 경우(강의번호 삭제). 학생 데이터까지 삭제된다→삭제이상

아래와 같이 학생 테이블을 따로 만든다.

③ 3정규형(3NF): 이행적 함수종속 제거, 기본키가 아닌 모든 속성간에는 서로 종속될 수 없다.

학과는 학과번호에 종속된다. 기본키가 아닌 속성에 종속되는 것은 3정규형을 위반한다.

학과테이블을 별도로 만들어 학생 테이블에서 학과 테이블을 참조하도록 한다.

④ BCNF: 기본키가 아닌 속성이 기본키의 속성을 결정지을 수 없다.

'교수는 하나의 강의만 담당할 수 있다' 라는 사전조건이 들어가야 한다.

이 때에는 '교수' 속성이 '강의' 속성(기본키)을 결정지을 수 있다.

이럴 경우 아래와 같이 테이블을 분할한다.

'CS > 데이터베이스' 카테고리의 다른 글

JOIN  (0) 2021.09.30
DB 역정규화  (0) 2021.09.30
이상(Anomaly)  (0) 2021.09.29
SQL vs NoSQL  (0) 2021.09.29
트랜잭션의 격리수준  (0) 2021.09.28