본문 바로가기

별걸다하는 IT/데이터베이스 Database

[데이터베이스 정규화] 제 3정규형(3NF)와 이행적 종속성에 대해 살펴보자

[데이터베이스 DBMS 완전정복 목차]

안녕하세요 블로거 양햄찌입니다~!

최근에 쭉 정규화에 대한 포스팅을 진행중인데요, 저번에 알아봤던 제1정규형(1NF) 제2정규형(2NF)에 이어서 오늘의 주제는 제 3정규형(3NF)입니다.

 

물론 해당 포스팅을 진행하기 전에 제1정규형과 제2정규형에 대해 알고 있어야합니다.

또 이와 관련있는 정규화의 목적, 함수적 종속성(FD: Functional Dependency), 완전 함수적 종속과 부분적 함수 종속 등의 개념 또한 이해하고 있어야 합니다.

 

해당 부분에 대한 학습이 부족하다고 생각하시는 분들은 아래 링크를 참고해주세요.

 

▼ 정규화란 무엇인가, 그시작 제1정규화: jhnyang.tistory.com/357

 

[데이터베이스 DBMS] 정규화에 대해서 알아보자~! 정규화를 해야하는 이유와 필요성, 제1정규화에

[데이터베이스 완전정복 목차!] 안녕하세요~!! 오늘도 찾아온 양햄찌블로거 입니다. 다른 카테고리에 비해 디비관련 글 개수가 적은 것 같아 요새 포스팅을 좀 늘리려고 노력하고 있어요 ㅎㅎ 오

jhnyang.tistory.com

▼제2정규화와 알아보는 결정자&종속자&종속관계: jhnyang.tistory.com/358

 

[데이터베이스 정규화] 제2정규화(2NF)와 알아보는 결정자와 종속자 그리고 그 관계 (완전 함수적

[데이터베이스 강좌 링크 바로가기] 안녕하세요~~ 양햄찌 주인장입니다. 저번 포스팅에서 정규화란 무엇인지! 정규화가 왜 필요한지에 대한 설명과 더불어 제1정규화를 간략하게 살펴보고 끝냈

jhnyang.tistory.com

제 3정규형 3NF (Third Normal Form)

릴레이션이 제2정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않으면 제3정규형에 속한다.

 

제 3정규형 정의부터 보면 뭔말인지 모를 가능성이 높으니,, 

왜 제3정규형이 필요한지, 제3정규형은 우뜨케 다듬는걸 말하는건지, 이를 논리적으로 표현한 문장이 왜 저렇게 성립되는지 차차 알아보도록 합시다.

 

일단 정규형은 단계별로 차례차례 다듬는 거라고 말했었죠?

우리는 제1정규형을 만족하고 제2정규형을 만족하지만 제3정규화를 아직 하기 전인, 예시 테이블을 보고 해당 부분의 문제점이 무엇인지 먼저 느껴봅시다. 

제2정규화 대상의 경우 저번 포스팅에서 언급했듯이 복합키일 경우에만 해당입니다. 즉 제1정규형을 만족하면서도 기본키가 하나의 속성이라면 바로 제2정규형 만족이예요. 

온라인쇼핑몰 생각하면서 임의로 테이블 하나 만들어보았어요.

하나의 컬럼에 다수의 데이터가 들어가 있지도 않고,,, 테이블의 주키가 복합키도 아니니 1NF와 2NF를 만족하는걸 바로 확인할 수 있어요.

 

여전히 제 2정규화 이후에도 남아있는 문제

그런데 문제는 아직도 남아있죠!! 

 

갱신이상

양말을 판매하는 판매자 전화번호가 변경되었다고 가정해봅시다. 판매자전화번호가 여러개 중복되어 있어 다수의 레코드를 업데이드 쳐줘야 해요. 뭐 잘 찾아서 갱신(update) 잘하면 딱히 문제는 없지만, 일치하는 모든 데이터를 찾아서 변경해줘야하니 복잡할수록 비정상적으로 갱신될 가능성이 있으니 동일하게 갱신이상 문제가 있을 수 있습니다.

데이터 일치 보장 X

이런 경우에도 물론 데이터정합성을 보장할 수 없죠. 누군가가 실수로 하나를 빠뜨리고 변경한다던가 해도 알 수가 없어요. 물론 데이터 양이 작으면 발견하기 쉽겠지만 많을수록 어렵겠죠.

 

삽입이상, 삭제이상

갱신이상처럼 삽입이상 삭제이상 또한 발생할 수 있는데요,예를 들어 판매자가 판매할 물품이 없으면 테이블에 등록을 못한다는 겁니다. 상품아이디가 기본키인데 상품자체가 없는데 우뜨케 테이블에 등록하겠어요! 그런데 생각해보면 판매자로 가입만하고 물품을 안올렸을수도 있잖아요 그럴경우 데이터를 삽입할 수 없어요. 이런 이상이 삽입이상입니다.

삭제이상은 1112의 상품이 삭제가 되면 판매자의 정보도 싹 다 삭제된다는거, 판매자가 탈퇴한게 아닌데 정보가 날라가버려요! 이런 경우를 삭제이상이라고 합니다.

 

제 3정규화 대상 판별하기, 이행적 함수적 종속성이란?

이런 테이블의 경우 많은 이상이 발생하기 때문에 테이블 분리가 필요합니다. 이 과정이 제 3정규화예요.

이런 이상이 왜 발생하는가?? 판매자 전화번호의 경우 판매자에 따라가지 사실 상품과는 큰 관계가 없어요. 그런데 한 테이블에 이렇게 묶여있으니까 각 상품마다 동일판매자일 경우 레코드 중복이 일어나 문제가 발생하는거죠.

 

마치 제2정규화와 유사합니다. 제 2정규화가 복합키가 주키일 경우 목적에 따라 테이블을 분리해준다 하면 제 3정규화는 단일키가 주키인데 반복적 데이터가 많을 경우 이상을 대비해 테이블을 분리해주는거죠.

 

자 이 부분을 보세요, 왜 이렇게 중복 데이터가 있을까요??

바로 판매자 전화번호는 판매자에 의해 결정되지 상품아이디에 결정되지 않기 때문입니다.

그런데 상품이 등록됐다는건 판매자가 존재한다는 애기예요.

즉 상품이 등록되면 판매자는 등록되는데 판매자전화번호는 상품이 아니라 판매자에 영향을 받습니다.

이런경우 상품 테이블 따로 판매자 테이블 따로 분리해줘야 하는거예요!

 

이와 같이 얽혀있는 관계를 용어로 이해적 함수적 종속성이라고 합니다. 

 

이행적 함수적 종속성

한 릴레이션의 애트리뷰터 A,B,C가 주어졌을 때 애트리뷰트 C가 이행적으로 A에 종속한다 (A→C)는 것의 필요청분 조건은 A→B ∧ B→C 가 성립하는 것이다.

 

이행적 종속성은 영어로 transitive FD라고 합니다. 

뒤에는 어차피 상품에 종속되는 속성들이니 제외하고,, (속성이 너무 많아서 필요한 부분까지 추림)

관계도를 그려보면 위와 같이 될거예요.

 

자 여기서 보면 상품아이디가 판매자를 결정하고 판매자가 판매자 전화번호를 결정하므로

상품이 등록되면 알아서 판매자전화번호가 결정되는 이런 관계를 갖고 있죠?

 

여기서 A는 상품아이디, B는 판매자, C는 판매자 전화번호가 될거예요. 이를 분리해줍시다.

제 3정규화 결과

분리해주면 이렇게 될거예요.

 

한 릴레이션 R이 제3정규형을 만족할 필요충분조건은릴레이션 R이 제2정규형을 만족하면서, 키가 아닌 모든 애트리뷰트가 릴레이션 R의 기본키에 이행적으로 종속하지 않는것이다.

A relation is in third normal form, if there is no transitive dependency for non-prime attributes as well as it is in second normal form.

이제 이 문장이 이해되셨죠?!

 

다만 상품테이블의 경우 상품아이디로 모든 레코드를 식별할 수 있는데,

판매자의 경우 동명이인이 발생하면 식별이 불가능해요. 이를 위해 판매자식별번호를 별도로 넣어준 후 기본키로 지정하면 동명이인이여도 혼란이 없겠죠 ㅎㅎ

 

짠 깔끔하게 분리했습니다. 오늘은 제 3정규형에 대해서 얘기해봤어요.  

공감은 정보공유에 큰 힘이 됩니다 :) 그럼 다음 포스팅에서 봐요 여러분~~~