DB 정규화

김현학·2023년 10월 17일
0

정규화

  • 정규화는 데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 방법이며 데이터를 분해하는 과정이다.
  • 정규화는 데이터 중복을 제거하고 데이터 모델의 독립성을 확보하기 위한 방법이다.
  • 정규화는 테이블을 분해해서 데이터 중복을 제거하기 때문에 데이터 모델의 유연성을 높인다.
  • 정규화를 수행하면 비즈니스에 변화가 발생해도 데이터 모델의 변경을 최소화할 수 있다.
  • 정규화는 제1정규화부터 제5정규화까지 있지만, 실질적으로는 제3정규화까지만 수행한다.
  • 정규화된 모델은 테이블이 분해된다. 필요에 따라 동일한 식별자를 바탕으로 Join 연산으로 하나의 합집합으로 만들 수 있다.
  • 정규화를 수행하면 불필요한 데이터를 입력하지 않아도 되기 때문에 중복 데이터가 제거된다.
  • 정규화는 함수적 종속성을 근거로 한다. 함수적 종속성이란 Y 속성이 X 속성 값이 변함에 따라 다른 값에 대응되는 관계를 의미한다.

이상현상

Insertion anomaly

스키마의 구조 또는 제약으로 인해,
불필요한 정보(또는 null)를 함께 저장하지 않고서는 어떤 정보를 저장하는 것이 불가능하다.

There are circumstances in which certain facts cannot be recorded at all.

For example, each record in a "Faculty and Their Courses" relation might contain a Faculty ID, Faculty Name, Faculty Hire Date, and Course Code. Therefore, the details of any faculty member who teaches at least one course can be recorded, but a newly hired faculty member who has not yet been assigned to teach any courses cannot be recorded, except by setting the Course Code to null.

Update anomaly

한 레코드에 대한 수정이 다중 레코드에 대한 갱신을 강제할 때,
갱신이 부분적으로만 성공하는 경우에 데이터의 불일치가 발생할 수 있다.

The same information can be expressed on multiple rows; therefore updates to the relation may result in logical inconsistencies.

For example, each record in an "Employees' Skills" relation might contain an Employee ID, Employee Address, and Skill; thus a change of address for a particular employee may need to be applied to multiple records (one for each skill). If the update is only partially successful – the employee's address is updated on some records but not others – then the relation is left in an inconsistent state. Specifically, the relation provides conflicting answers to the question of what this particular employee's address is.

Deletion anomaly

어떤 정보를 삭제할 때, 관련 없는 다른 데이터의 삭제가 강제된다.
바꿔 말하면, 필요한 정보를 함께 삭제하지 않고서는 어떤 정보를 삭제하는 것이 불가능하다.

Under certain circumstances, the deletion of data representing certain facts necessitates the deletion of data representing completely different facts.

The "Faculty and Their Courses" relation described in the previous example suffers from this type of anomaly, for if a faculty member temporarily ceases to be assigned to any courses, the last of the records on which that faculty member appears must be deleted, effectively also deleting the faculty member, unless the Course Code field is set to null.

제1정규화

속성의 원자성을 확보한다.
기본키를 설정한다.
모든 속성은 반드시 하나의 값만 가져야 한다.
속성값이 하나가 되도록 엔터티를 분리한다.
유사한 속성이 반복되는 경우도 1차 정규화의 대상이 된다.

문제

하나의 속성이 다중값을 가지는 경우, 애플리케이션에서 조회한 결과에 split을 사용해야 한다.
다중 속성에 대한 질의가 어렵다.
유사한 속성이 반복되는 경우, 속성의 최대 개수가 늘어날 때마다 속성을 추가해야 한다.
인스턴스가 추가된 속성의 개수만큼 속성값을 가지지 않는 경우, 공간이 낭비된다. (희소 행렬)

해결

유사한 속성이 반복되지 않도록 엔터티를 분리한다.
유일성과 최소성을 만족하는 식별자로서 가능한 속성의 조합(후보키)을 찾는다.


제2정규화

기본키가 2개 이상의 속성으로 이루어진 경우, 부분 함수 종속성을 제거(분해)한다.
기본키가 하나의 칼럼으로 이루어지면 제2정규화는 생략한다.
엔터티의 모든 일반속성은 반드시 모든 주식별자에 종속되어야 한다

문제

주식별자가 복합식별자일 때, 일반속성이 주식별자의 일부에만 종속되는 경우,
1. 종속되지 않은 키가 결정되지 않으면 입력을 할 수 없다. (Insertion anomaly)
2. 데이터 중복으로 인해, 한 레코드에 대한 일반속성의 변경이 테이블 내 동일 값을 지닌 모든 레코에 대한 변경을 초래한다. (Update anomaly)

해결

주식별자에 대한 부분종속이 없도록 엔터티를 분리한다.


제3정규화

제3정규화는 제1,2 정규화를 수행한 이후 진행해야 한다.
기본키를 제외하고 칼럼 간에 종속성이 발생하는 이행 함수 종속성을 제거한다.
주식별자가 아닌 모든 속성 간에는 서로 종속될 수 없다.

문제

해결

다른 일반속성에 종속되지 않도록 엔터티를 분리한다.


BCNF

후보키란 최소성과 유일성을 만족하나, 기본키가 아닌 식별자를 의미한다.
복수의 후보키가 있고, 후보키들이 복합 속성이어야 하며, 서로 중첩되어야 한다.
기본키를 제외하고 후보키가 있는 경우, 후보키가 기본키를 종속시키면 분해한다.


제4정규화

여러 칼럼들이 하나의 칼럼을 종속시키는 경우 분해하여 다중값 종속성을 제거한다.


제5정규화

조인에 의해서 종속성이 발생되는 경우 분해한다.


Reference

Database normalization - Wikipedia
2023 이기적 SQL 개발자 이론서+기출문제
2023 유선배 SQL개발자(SQLD) 과외노트 (yes24.com)
Update Anomalies | Vertabelo Database Modeler

0개의 댓글