본문 바로가기

[한설날] 데이터 정규화

728x90

 

 

 

정규화(Normalization)란?

. 정규화란 관계형 데이터베이스에서 중복을 최소화하여 데이터를 구조화하는 과정입니다.

. 이 글에선 3NF까지만 다룹니다.

 

 

 

정규화를 하는 이유

. 데이터 변경 시 이상 현상(CUD 중 발생하는 오류)를 제거하기 위해서.

. DB 확장 시 DB의 구조 변경을 최소화하기 위해서.

 

 

 

제1 정규형 (1NF)

조건 1. 필드와 레코드의 순서는 상관 없어야 합니다

조건 2. 필드명은 중복되선 안 됩니다

조건 3. 하나의 레코드에는 하나의 값만 들어갑니다

회원번호 도서명
1 오리진 1권, 2권

. 위 테이블에서 '도서명' 필드의 레코드에 2개의 값이 있기 때문에 다음과 같이 고쳐야 합니다.

회원번호 도서명
1 오리진 1권
1 오리진 2권

 

 

 

제2 정규형 (2NF)

조건 1. 제1 정규형을 만족해야 합니다.

조건 2. 모든 필드에 부분적 종속이 없어야 합니다. 즉 완전 함수 종속을 만족해야 합니다.

. 부분적 종속이란 PK가 여러 필드의 조합일 때, 일반 필드가 PK의 조합 중 일부만 있어도 되는 상황을 말합니다.

- 테이블 예시로 보면 다음 테이블과 같습니다.

회원번호 (PK) ISBN (PK) 도서명
1 111-1-11-111111-1 오리진 1권
1 222-2-22-222222-2 오리진 2권

▴ 위 테이블에서 PK의 조합은 '회원번호'와 '도서명' 필드의 조합인데 '도서명' 필드는 'ISBN' 필드만으로도 알 수 있는 정보입니다. 따라서 위 테이블을 다음과 같이 쪼개야 합니다.

ISBN (PK) 도서명
111-1-11-111111-1 오리진 1권
222-2-22-222222-2 오리진 2권

 

회원번호 (PK) ISBN (FK)
1 111-1-11-111111-1
1 222-2-22-222222-2

 

 

 

제3 정규형 (3NF)

조건 1. 제2 정규형을 만족해야 합니다.

조건 2. 키가 아닌 필드 간 이행 종속성이 없어야 합니다.

. 이행 종속성이란 PK가 아닌 필드들은 PK에만 의존해야 하며, 다른 키에 의존해선 안 됩니다.

- 쉽게 풀면 A가 PK일 때 A→B이고 B→C라서 A→C 관계가 성립하는 상태입니다.

- 테이블 예시로 보면 다음 테이블과 같습니다.

회원번호 (PK) 등급 대출 가능 수량
1 2

▴ '회원번호' 필드를 알면 '등급'을 알 수 있습니다. '등급'을 알면 '대출 가능 수량'을 알 수 있습니다. 하지만 '회원번호'만 알아도 '대출 가능 수량'을 알 수 있습니다. 제3 정규형을 만족하기 위해서 다음과 같이 테이블을 쪼개야 합니다.

회원번호 (PK) 등급 (FK)
1

 

등급 (PK) 대출 가능 수량
2

 

 

 

제3.5 정규형 (BCNF)

조건 1. 제3 정규형을 만족해야 합니다.

조건 2. PK가 아닌 필드가 다른 필드의 값을 결정해선 안 됩니다.

. 테이블 예시로 보면 다음 테이블과 같습니다.

회원번호 (PK) 등급 대출 가능 수량
1 2

- 대출 가능 수량은 등급에 의해 결정되지만 등급은 PK가 아니므로 위 테이블은 다음과 같이 쪼개야 합니다.

회원번호 (PK) 등급 (FK)
1

 

등급 (PK) 대출 가능 수량
2

 

 

 

#00741 #한설날

 

728x90