코딩관계론

[Database] 정규화(Normalization)이란? 본문

DB/SQLD

[Database] 정규화(Normalization)이란?

개발자_티모 2022. 10. 20. 18:59
반응형

[ 정규화(Normalization) 수행 이유]

  • 정규화는 데이터의 일관성 최소한의 데이터 중복, 최소한의 데이터 유연성을 위해 데이터를 분해하는 과정이다
  • 중복된 데이터를 허용하지 않음으로써 데이터의 무결성을 유지할 수 있다. 

 

[ 1 정규화 ]

모든 속성은 단 하나의 값을 가져야 한다.

 

아래의 표를 보면 연락처 속성에 휴대폰과 집전화가 혼합되서 들어있는 것을 볼 수 있다. -> 단 하나의 의미를 가지는 것이 아님

 

[이와 같이 테입을을 구성한다면 몇 가지 단점이 존재한다]

  • 연락처 정보에 든 값이 휴대폰인지, 집 전화인지 구별이 불가능하다. 
  • 명확하지 않은 속성은 이메일처럼 다른 유형의 데이터를 포함할 수 있다. 
고객번호 고객명 연락처
1000 배재완 010-7123-1234, 02-123-123
1001 이영빈 010-4655-6777
1002 김선영 010-1244-1233

 

[따라서 위의 테이블은 아래와 같이 두 가지로 분리해야함.] 

  • 두 개의 테이블로 분리하면서 전화번호의 타입에 따라(휴대폰, 집전화) 전화 타입을 구별할 수 있도록 함
  • 속성이 명확함으로 다른 유형의 데이터를 쓸 일이 적어짐

[고객]

고객번호 고객명
1000 배재완
1001 이영빈
1002 김선영

[고객 연락처]

고객번호 전화 타입 연락처
1000 1 010-7123-1234
1001 2 010-4655-6777
1002 1 010-1244-1233
1000 2 02-123-123

 

[ 2 정규화 ]

엔터티의 일반속성은 주식별자 전체에 종속적이어야 한다. 복합키 일 때만 존재함

아래의 주문 상세 테이블을 보면 상품 번호는 고객이 주문할 때 발생하는 매핑 정보로서의 의미를 가지고 있다. 하지만 상품명을 보면 고객의 주문이랑 상관 없이 상품 번호에 종속적이다. 이러한 현상을 함수종속성이라고 한다

주문번호(주식별자) 상품번호(주식별자) 상품명(일반속성)
1000 123 sql 책 
1001 123 sql 책 
1002 1545 인간관계론
1000 244 하버드 글쓰기

[ 함수종속성이란]

데이터들이 어떤 기준값에 의해 종속되는 현상을 지칭한다. 이떄 기준 값을 결정자라 하고, 종속되는 값을 종속자라고 한다. 

[이와 같이 테입을을 구성한다면 몇 가지 단점이 존재한다]

  • 상품명이 변경됐을 경우 주문 상세 테이블의 상품명 또한 변경해야 한다.
  • 데이터의 중복은 성능과 정합성에 문제를 발생시킨다.

따라서 아래처럼 테이블을 분리하여 함수종속성을 해결한다. 

주문번호(주식별자) 상품번호(주식별자)
1000 123
1001 123
1002 1545
1000 244
상품번호(주식별자) 상품명(일반속성)
123 sql 책 
1545 인간관계론
244 하버드 글쓰기

 

[ 3 정규화 ]

엔터티의 일반속성 간에는 서로 종속적이지 않다. 즉 이행종속적이지 않다

2종규화랑 차이점은 2형은 주식별자 전체에 일반 속성이 종속되어야 한다(ex,위의 키에는 주문번호와 상품번호가 키로 있지만 상품명은 상품번호에만 의존함)

[ 이행종속적이란]

기본 속성이 주 식별자가 아닌 다른 식별자에 의해 종속되는 것을 이행종속이라고 한다. 

 

아래와 같이 주문테이블이 있다면 주문번호는 -> 고객번호이고 고객번호는 -> 고객 이름이다 이러한 형태를 이행 종속이라고 부른다 

주문번호(주식별자) 고객번호 고객 이름
1000 123 배재완
1001 213 김선영
1002 1545 티모
1000 244 모티

 

[이와 같이 테이블을 구성한다면 몇 가지 단점이 존재한다]

  • 삽입 이상: 새로운 고객 번호와 이름을 추가하고 싶은데 주문번호가 없어서 추가하지 못하는 현상이 발생(무결성 위반)
  • 수정 이상: 고객 이름이 변경될 경우 모든 데이터에 대해서 일괄적으로 변경해야한다.
  • 삭제 이상:주문 번호만 삭제하고 싶은데 고객 번호와 고객 이름까지 삭제되는 현상이 발생한다.

 

주문번호(주식별자) 고객번호
1000 123
1001 213
1002 1545
1000 244
고객번호(주식별자) 고객 이름
123 배재완
213 김선영
1545 티모
244 모티

[ BCNF]

모든 결정자가 후보키(유일, 최소)여야 한다.
학번 과목 교수
6014 데이터 베이스 브라운
5813 데이터 베이스 브라운
4831 데이터 베이스  블랙
1231 정보 보안 레드

(학번, 과목) 조합은 교수를 결정할 수도 있지만, 교수가 하나의 과목만을 가르친다고 생각했을 때는

교수가 과목을 결정할 수 있다. 따라서 아래와 같이 분리가 필요하다.

학번 과목
6014 데이터 베이스
5813 데이터 베이스
4831 데이터 베이스 
1231 정보 보안
과목 교수
데이터 베이스 브라운
데이터 베이스 브라운
데이터 베이스  블랙
정보 보안 레드

 

반응형

'DB > SQLD' 카테고리의 다른 글

sqld 합격  (0) 2023.04.14
데이터 모델링의 이해  (0) 2023.03.14
SQL의 종류  (0) 2023.03.12
Join  (0) 2023.01.25
[Database] 엔터티(Entity)와 속성(Attribute)  (0) 2022.10.20