본문 바로가기

기록(노트)

정규화(1NF,2NF,3NF)/composite primary key(복합 키)/함수적 종속성(Functional Dependency)

정규화 - 데이터의 중복과 이상 현상을 최소화하기 위해 Normal Form(NF)에 따라서 관계형 데이터베이스를 구성하는 과정이다.(이상 현상이 발생하는 릴레이션을 분해하여 이상현상을 없애는 과정)

함수적 종속성을 판단하여 정규화를 진행한다.

 

NF는 정규화되기 위해 지켜야 하는 규칙들.

정규화 과정은 순차적으로 진행하며, NF을 만족하지 못하면 만족하도록 테이블의 구조를 조정해야한다.

 

튜플을 삭제했을때, 함께 저장되어 있는 다른 데이터까지 연쇄적으로 삭제되는 현상 발생.

 

함수적 종속성(Functional Dependency)

-속성들 간 관련성

-정규화 진행 전, 테이블을 분석하여 기본 키와 함수 종속성을 파악해야한다.

-FD를 이용해서 릴레이션을 연관성있는 속성들로만 구성되도록 분해하여 이상 현상이 발생하지 않는 릴레이션으로 만들어야 한다.

 

x의 값에 따라서 y의 값이 유일하게 결정되는 것.

--> x가 y를 함수적으로 결정한다.

--->y는 x에 함수적으로 의존한다.

두 집합 사이의 제약 관계를 FD라고 한다.

 

완전 함수 종속: 어떤 속성이 기본 키에 대해 완전히 종속적인 경우

부분 함수 종속: 어떤 속성이 기본 키에 대해 부분적으로 종속

 

제1정규형(1NF)

-릴레이션의 모든 속성의 값이 원자값을 만족하면, 제 1정규형이라고 한다.

 

제2정규형(2NF)

-릴레이션이 제1규형 상태, 기본 키가 아닌 속성들이 기본 키에 완전 함수 종속일때, 제2정규형을 만족하는 릴레이션이라고 말 할 수 있다.

-->부분 함수 종속 제거.

 

*완전 함수 종속인 속성들을 떼서 테이블을 만들어 준다.

 

composite primary key(복합 키)

-기본 키의 역할을 할 수 있는 컬럼이 없다고 가정, PK를 정의할 수 있다.

부분 종속(partial Dependency) --> 2정규형 완료

 

제3정규형(3NF)

-릴레이션이 2정규형을 만족하고 기본 키가 아닌 모든 속성 간에는 서로 종속될 수 있다.

-이행적 종속: A->B, B->C, A->C

*3NF : A->C관계가 잘못된 관계인지 판단해야함.

*PK가 아닌 다른 일반 컬럼에 종속된 컬럼을 다른 테이블로 빼는 작업.

 

4,5NF --> 후보 키에 관련된 내용. 3정규형까지는 우리가 진행.

그 이상은 너무 복잡해지고, 학술적인 측면이 강함.

============================

무손실 분해

릴레이션을 분해 -> 이상 현상을 제거하는 과정

지켜야하는 규칙

1)릴레이션의 관계유지를 위해 분해된 릴레이션에 공통 속성을 한개 이상 배치해야한다.(조인하기 위해서)

 

분해된 릴레이션을 다시 원래 릴레이션으로 조인할때, 데이터 손실 없이 원래 릴레이션으로 합쳐지면, 무손실 분해라고 한다.

 

======================

반정규화

시스템의 성능 향상, 개발 및 운영의 편의성을 위해 정규화된 데이터 모델을

통합, 중복, 분리하는 과정으로, 의도적으로 정규화 원칙을 위배하는 행위.

 

정규화 잘 했어요. > 구현 > 운영

 

방법

-테이블 통합

-테이블 분할

-중복된 테이블 추가

-중복 속성 추가

 

과도한 반 정규화는 오히려 성능을 저하시킬 수 있다.