[DB] 정규화(Normalization)

수박이삼촌·2024년 2월 1일
0

DataBase

목록 보기
8/10
post-thumbnail

정규화(Normalization)

  1. 이상현상(Anomaly)을 해결하기 위해 attribute 간의 종속 관계를 분석하여 여러 relation으로 분해하는 과정입니다.
  2. relation의 attribute, entity, 관계성을 파악하여 데이터의 중복성을 최소화하는 과정입니다.
  3. 논리적 설계 단계에서 수행됩니다.
  4. 정규화를 통해 relation을 분해하면 일반적으로 연산 시간이 증가합니다.
  5. 정규화 과정은 주어진 relation 변수들의 모임을 더 바람직한 어떤 형태로 점차 유도해가는 과정으로 특정지을 수 있습니다. 이 과정은 가역적(Reversible)입니다.

정규화의 목적

  1. 데이터베이스 수정, 삭제 시 이상 현상을 최소화시킵니다.
  2. 데이터 베이스의 물리적 구조나 물리적 처리에 영향을 주는 것은 아니고, 논리적 처리 및 품질에 큰 영향을 미칩니다.
  3. 데이터 구조의 안정성을 최대화시킵니다.
  4. 테이블 불일치의 위험을 최소화합니다.



이상 현상(Anomaly)

잘못 설계된 데이터베이스에서는 불필요한 데이터들의 중복이 발생하여 데이터의 삽입, 수정, 삭제, 연산을 수행할 때 부작용들이 발생할 수 있습니다. 이러한 부작용을 이상 현상이라고 합니다.

주로 세 가지 이상 현상이 존재합니다.

1. 삽입 이상(Insertion Anomaly):

새로운 데이터를 추가할 때 불필요한 정보까지 입력해야 하는 상황을 말합니다. 자료를 삽입할 때 특정 속성에 해당하는 값이 없어 NULL을 입력해야 하는 현상입니다.

예를 들어, 학생 정보와 과목 정보가 같이 저장된 테이블에 새 과목을 추가하려면, 해당 과목을 듣는 학생이 없더라도 임의의 학생 정보를 입력해야 하는 상황이 삽입 이상입니다.

2. 삭제 이상(Deletion Anomaly):

어떤 정보를 삭제할 때 연관된 정보까지 함께 삭제되는 상황을 말합니다.

예를 들어, 학생 정보와 과목 정보가 같이 저장된 테이블에서 학생이 모든 과목을 듣지 않게 되면 그 학생의 정보가 데이터베이스에서 사라져버리는 상황이 삭제 이상입니다.

3. 갱신 이상(Update Anomaly):

데이터를 수정할 때 일부 데이터만 변경하여 데이터 간 불일치가 발생하는 상황을 말합니다.

예를 들어, 같은 학생의 전화번호가 여러 곳에 저장되어 있어, 전화번호가 바뀌었을 때 모든 데이터를 갱신하지 않으면 일부는 바뀐 번호, 일부는 이전 번호로 표시되는 상황이 갱신 이상입니다.




함수 종속성(Functinal Dependency)

함수 종속성이란, 데이터베이스에서 한 속성(혹은 속성 집합)의 값이 다른 속성(혹은 속성 집합)의 값을 결정짓는 관계를 말합니다.

함수 종속성의 기본 형태는 'X -> Y'로 표현되며, 이는 "X가 주어지면 Y를 결정짓는다"라는 의미입니다. 여기서 X를 결정자(Determinant), Y를 종속자(Dependent)라고 합니다.

예를 들어, '학번 -> 학생 이름'은 함수 종속성의 한 예입니다. 이는 특정 학번이 주어지면 그에 해당하는 학생 이름을 알 수 있다는 것을 의미합니다.

완전 함수 종속(Full Functional Dependency)

한 릴레이션에 복합키가 존재할 때, 속성(집합)이 그 복합키 전체에 의해 종속되는 경우를 말합니다.

예를 들어, {학번, 과목 코드} -> 성적 이 학번과 과목 코드 전체에 의해 결정되므로 완전 함수 종속성을 가집니다.

부분 함수 종속(Partial Functional Dependency)

한 릴레이션에 복합키가 존재할 때, 속성(집합) 이 그 복합키의 일부에만 종속되는 경우를 말합니다.

예를 들어, {학번, 과목 코드} -> 학생 이름 에서 학생 이름은 학번에만 의존하므로 부분 함수 종속성을 가집니다.

이행 함수 종속(Transitive Dependency)

한 속성(집합)이 다른 속성(집합)을 통해 간접적으로 종속되는 경우를 말합니다. 즉, X -> Y, Y -> Z가 종속 관계일 때, X -> Z가 성립되는 경우입니다.

예를 들어, 학번 -> 학과, 학과 -> 학과장 이 성립하면, 학번 -> 학과장 이 성립됩니다.




정규화 과정

1차 정규형

테이블 R 에 속한 모든 도메인이 원자값(atomic value) 만으로 구성되어 있는 경우

img

2차 정규형

제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해한 경우
완전 함수 종속: 키의 부분 집합이 결정자가 되지 않음 (부분 종속 x)

img

=> 기본키가 '고객ID'와 '상품코드' 속성으로 구성되어있을 때 '제품명'은 기본키 중 '제품코드'만 알아도 식별 가능

이 경우에는 '제품명' 속성은 기본키에 부분 함수 종속된 관계

=> 하지만, '수량' 속성은 기본키를 알아야 식별이 가능

이 경우 '수량' 은 기본키에 완전 함수 종속된 관계


3차 정규형

제2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것
이행적 종속: X, Y, Z라는 3 개의 속성이 있을 때 X→Y, Y→Z 이란 종속 관계가 있을 경우, X→Z가 성립

img

=> '제품코드' 로 '소분류' 를 알 수 있습니다.

=> '소분류' 로 '대분류' 를 알 수 있습니다.

=> 따라서 '제품코드' 로 '대분류' 를 알 수 있다. = 대분류는 소분류에 의해 관계되는 항목이지만, 제품코드를 통해 귀속

이행적 종속을 제거하지 않는다면, '소분류'에서 '컴퓨터 부품'을 수정한다면 모든 '컴퓨터 부품'이 포함된 튜플을 모두 수정해주어야 합니다.


보이스-코드 정규형(BCNF)

제3 정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해한 경우
후보키: 테이블에서 각 행을 유일하게 식별할 수 있는 최소한의 속성들의 집합.
후보키는 기본키가 될 수 있는 후보들이며 유일성과 최소성을 동시에 만족
X → Y 일 때 X는 결정자, Y는 종속자

img

=> (학생, 과목) -> 교수 & 교수 -> 과목

=> 교수가 과목을 결정하는 결정자이지만, 후보키가 아니라는 점

img

=> 학생 / 교수 (함수적 종속x) , 교수 -> 과목


4차 정규형

3정규형 또는 BCNF를 만족하면서 추가로 다치 종속(MVD, Multi-Valued Dependency)을 제거한 형태입니다.
다치 종속이란 하나의 속성이 다른 속성에 대해 여러 개의 값을 가지는 경우를 말합니다.

예를 들어, 한 사람이 여러 개의 전화번호를 가지고 있는 경우가 다치 종속의 예입니다. 이를 제거함으로써 데이터베이스의 무결성을 높일 수 있습니다.


5차 정규형

4정규형을 만족하면서 추가로 조인 종속성을 만족하는 형태입니다.
조인 종속성이란 릴레이션을 분해한 후에 다시 조인 연산을 수행했을 때 원래의 릴레이션을 얻을 수 있는 성질을 말합니다.


반정규화(De-Normalization)

정규화를 거치면 릴레이션 간의 연산(JOIN 연산)이 많아지는데, 이로인해 성능이 저하를 고려해 다시 정규화 이전 형태로 돌려 놓습니다.
데이터 조회 시 디스크 I/O량이 많을 때 부분적인 반정규화를 고려합니다.

특징

  1. 시스템이 물리적으로 구현되었을 때 성능 향상을 목적으로 합니다.
  2. 데이터 모델링 규칙에 얽매이지 않고 수행합니다.
  3. 반 정규화 방법에는 테이블 통합, 테이블 분할, 중복 테이블 추가, 중복 속성 추가 등이 있습니다.

profile
Today I Learned

0개의 댓글