라즈베리파이반

라즈베리파이 등 컴퓨터계열 게시판입니다.

제목SQL: 데이터베이스 정규화2023-03-31 02:10
작성자user icon Level 4

88x31.png


데이터베이스 정규화는 관계형 데이터 모델에서 데이터의 중복을 제거하여 이상현상을 방지하고 데이터의 일관성을 유지하기 위해 테이블을 분해하는 과정입니다.



제 1 정규화


제 1 정규화는 테이블의 컬럼이 원자값을 가지도록 테이블을 분해하는 단계입니다.


예를 들어 아래와 같은 테이블이 있다고 가정합시다.


사원 취미 

 이름

 취미

 홍길동

 프로그래밍, 천체관측, 유튜브 감상



해당 테이블은 취미라는 속성에 2개 이상의 값이 존재합니다. 속성값을 원자값으로 구성하기 위해 제 1 정규화를 진행합니다.


사원 취미 

 이름

 취미

 홍길동

 프로그래밍

 홍길동

 천체관측

 홍길동

 유튜브 감상




제 2 정규화


제 2 정규화는 제 1 정규화를 진행한 테이블에 대하여 부분 함수 종속을 제거하여 완전 함수 종속을 만족하도록 테이블을 분해하는 단계입니다.


완전 함수 종속이란 기본키의 부분집합이 결정자가 되어서는 안된다는 것을 의미합니다.


예를 들어 아래와 같은 테이블이 있다고 가정합시다.


수강정보 

 이름

 담당교수

 과목

 홍길동

 장영실

 수학

 이순신

 장영실

 수학

 김유신

 허준

 생물


해당 테이블의 경우 이름과 담당교수가 기본키가 되며, 해당 기본키의 부분집합인 담당교수가 과목을 결정하게 되어 제 2 정규형을 만족시키지 못합니다.


부분 함수 종속성 

 


해당 테이블을 다음과 같이 분해하게 되면 두 테이블은 완전 함수 종속성을 만족하게 됩니다.


수강정보

 이름

 담당교수

 홍길동

 장영실

 이순신

 장영실

 김유신

 허준



담당교수 

 담당교수

 과목

 장영실

 수학

 허준

 생물



제 3 정규화


제 3 정규화는 제 2 정규형을 만족하는 테이블에 대하여 이행 함수 종속을 제거하도록 테이블을 분해하는 단계입니다.


이행 함수 종속이란 식별자가 아닌 일반 속성이 다른 일반 속성을 결정하는 상태를 말합니다.


예를 들어 아래와 같은 테이블이 있다고 가정합시다.


수강정보

 이름

 과목

 담당교수

 홍길동

 수학

 장영실

 이순신

 수학

 장영실

 김유신

 생물

 허준


식별자가 아닌 과목이 등록금을 결정하는 상태이므로 이행 함수 종속을 가집니다.


이행 함수 종속성

 


해당 테이블을 다음과 같이 분해하게 되면 이행 함수 종속이 제거됩니다.


수강과목

 이름

 과목

 홍길동

 수학

 이순신

 수학

 김유신

 생물


과목정보 

 과목

 담당교수

 수학

 장영실

 생물

 허준



BCNF 정규화


BCNF 정규화는 제 3 정규형을 만족하는 테이블에 대하여 모든 결정자가 후보키가 되도록 테이블을 분해하는 단계입니다.


예를 들어 아래와 같은 테이블이 있다고 가정합시다.


수강정보

 이름

 과목

 담당교수

 홍길동

 수학

 장영실

 이순신

 수학

 정약용

 김유신

 생물

 허준


기본키인 이름과 과목이 담당교수를 결정하며, 담당교수가 과목을 결정합니다. 하지만 결정자인 담당교수는 후보키가 아닙니다.


후보키가 아닌 결정자

 


해당 테이블은 다음과 같이 분해할 수 있습니다.


수강정보

 이름

 담당교수

 홍길동

 장영실

 이순신

 정약용

 김유신

 허준


담당교수 

 과목

 담당교수

 수학

 장영실

 수학

 정약용

 생물

 허준

#SQL# 제 1 정규화# 제 2 정규화# 제 3 정규화 # BCNF 정규화
댓글
자동등록방지
(자동등록방지 숫자를 입력해 주세요)