[Database] 정규화(Normalization)

Jay Lee·2022년 11월 7일
0

database

목록 보기
2/6

배경

이상(Anormaly)

이상이란 릴레이션에서 일부 속성들의 종속이나 데이터의 중복으로 인해 데이터 조작 시 불일치가 발생하는 것을 의미한다. 즉, 테이블의 잘못된 설계로 데이터의 삽입, 갱신, 삭제 시 논리적 오류의 발생하는 것을 말한다. 하나의 종속성이 하나의 릴레이션에 표현될 수 있도록 분해하여 이러한 논리적 오류를 줄이는 과정이 정규화이다.

이상의 종류에는 삽입이상, 갱신이상, 삭제이상이 있습니다.

  1. 삽입 이상: 데이터를 삽입할 때 의도하지 않은 데이터가 삽입되는 현상
  2. 갱신 이상: 중복된 데이터 중 일부만 수정 되어 동일한 레코드 간의 불일치가 발생하는 현상
  3. 삭제 이상: 원하는 데이터 외의 다른 데이터가 연쇄적으로 삭제 되는 현상

함수적 종속(Functional Dependency)

함수적 종속이랑 어떤 릴레이션 내에서 두 속성 X, Y가 X의 값을 알면 Y의 값을 알 수 있고, X의 값에 따라 Y의 값이 달라질 때, Y는 X에 함수적 종속이라고 한다. 이 경우 X를 결정자, Y를 종속자라고 하며 X → Y로 나타낸다. 이런 함수적 종속에는 완전 함수적 종속, 부분 함수적 종속, 이행적 함수적 종속이 있습니다.

완전 함수적 종속 (Fully Functional Dependency)

완전 함수적 종속이란, 종속자가 기본키에만 종속되며, 복합키를 사용할 경우 기본키를 구성하는 모든 속성이 포함된 기본키의 부분집합에 종속된 경우이다. 즉, 기본키 일부만 알면 나머지 속성을 알 수 없는 경우를 의미한다.

부분 함수적 종속 (Partial Fuctional Dependency)

부분 함수적 종속이란, 릴레이션에서 종속자가 기본키가 아닌 다른 속성에 종속되거나, 복합키를 사용할 경우 기본키를 구성하는 속성 중 일부에만 종속되는 경우를 의미한다.

[예시]

'성적' 속성은 기본키인 ('학번', '과목번호')에 대해 종속적이기 때문에 이는 완전 함수적 종속을 만족한다. 반면 '학년' 속성의 경우 기본키들 중 '학번' 속성에 대해서만 종속적이기 떄문에 이는 부분 함수적 종속을 만족한다.

이행적 함수적 종속 (Partial Fuctional Dependency)

이행적 함수적 종속이란, X → Y, Y → Z, 두 개의 종속관계가 있을 경우 X → Z가 성립되는 경우를 의미한다. 즉, 속성 Z가 X에 종속되어 있는 속성 Y에 의해 결정되는 경우이다.

[예시]

'학번'속성은 '지도 교수' 속성을 결정하고, '지도 교수'의 경우 '학과'를 결정 할 수 있기 때문에 '학과' 속성은 '학번'속성에 이행적 함수적 종속되어 있다고 볼 수 있다.



정규화란 무엇인가?

관계형 데이터베이스에서 중복을 최소화하기 위해 데이터를 구조화 하는 작업이다. 즉, 중복된 릴레이션의 어트리뷰트들을 나누어서 작은 릴레이션으로 분해하는 작업을 말한다. 정규화 과정을 거치게 되면 특정 조건을 만족하는 스키마 형태인 정규형을 만족하는 테이블이 된다.

정규화의 장점

  1. 데이터베이스 변경 시 이상 현상의 발생을 최소화 할 수 있다.
  2. 새로운 데이터 형의 추가 등의 데이터베이스 구조 확장 시, 변경을 최소화 할 수 있다. 이는 데이터베이스와 연동된 어플리케이션에 최소한의 영향을 미치게 된다.
  3. 데이터간의 관계가 명확해져 사용자에게 데이터 모델을 더욱 의미있게 제공할 수 있다.



정규화의 단점

  • 중복되는 속성이 제거되고 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약되므로 테이블의 데이터 용량이 최소화 된다.
  • 릴레이션의 분해로 인해 일반적인 Query 처리 시 JOIN 코스트가 발생한다.
  • 하나의 Query에 너무 많은 테이블을 조인하게 되면 데이터 처리 성능 저하가 발생 할 수 있다.

언제 반정규화가 필요한가?

  1. 자주


정규화의 원칙

  1. 정보의 무손실
    → 하나의 스키마를 다른 스키마로 변환할 때, 정보의 손실이 있어서는 안된다.
  2. 분리의 원칙
    → 하나의 독립된 관계성은 하나의 독립된 릴레이션으로 분리시켜 표현해야 한다.
  3. 데이터의 중복성이 감소되어야 한다.



정규화 과정

정규화 과정은 다음으로 이루어져 있다.

제 1 정규형 → 제 2 정규형 → 제 3 정규형 → BCNF → 제 4 정규형 -> 제 5 정규형

제 1정규형 (1NF)

제 1 정규형은 모든 도메인이 원자값인 정규형이다. 즉, 하나의 레코드당 하나의 column에 두개 이상의 값을 가져서는 안된다는 것을 의미한다.

제 2정규형 (2NF)

제 2 정규형은 제 1 정규형을 만족하면서 모든 column이 완전 함수적 종속을 만족하는 정규형이다. 부분 함수적 종속을 제거함으로써 제 2정규형 테이블을 만들 수 있다. 즉, 기본키의 일부에만 종속되는 속성들을 다른 테이블로 만들어 관리하는 것을 의미한다.

제 3정규형 (3NF)

제 3 정규형은 제 2 정규형을 만족하면서 이행적 함수 종속관계를 갖지 않는 정규형이다. 즉, A → B → C 가 존재하는 테이블을 A → B와 B → C를 가지는 테이블 두 개로 나누는 것을 말한다.

BCNF (Boyce-Codd Normal Form)

BCNF는 제 3 정규형을 만족하면서 모든 결정자(Determinant)가 후보키임을 의미한다.BCNF는 제 3 정규형을 조금 더 강화시킨 개념이기때문에 Strong 3NF라고도 한다. 종속 관계가 2개 이상인 경우를 제거해주는 것을 말한다.

제 4정규형 (4NF)

제 4 정규형은 다중 값 종속 A→→B(다치 종속)가 존재할 경우 R의 모든 속성이 A에 함수적 종속 관계를 만족하는 정규형이다. 즉, 종속자가 모든 결정자에 의해 결정되어야 함을 의미한다. 다중 값 종속을 제거함으로써 제 4정규형을 만들 수 있다.

다치 종속(Multi Valued Dependency): 어떤 복합 속성에 대응하는 집합이 복합 속성의 일부에만 종속되고 나머지와는 무관한 것

제 5정규형 (5NF)

제 5 정규형은 릴레이션의 모든 조인 종속이 해당 릴레이션의 후보키를 통해서만 성립되는 정규형이다.

조인 종속(Join Dependency) : 테이블의 속성에 대한 부분집합이 있을 때, 해당 테이블이 자신의 프로젝션을 모두 조인한 결과와 동일한 경우 조인 종속을 만족한다고 한다.

Reference

한재엽님 Github
https://rebro.kr/160

profile
Data Engineer

0개의 댓글