정규화

정지원·2022년 5월 10일
0

https://www.youtube.com/watch?v=7meeyknh7yE&list=PLuHgQVnccGMDF6rHsY9qMuJMd295Yk4sa&index=24

https://livenow14.tistory.com/74

https://nirsa.tistory.com/107

정규화란

-> 데이터 중복을 줄이고, 데이터 무결성 (정확성, 일관성)을 개선하기 위해 정규화 단계에 따라 관계형 데이터베이스를 구조화 하는 프로세스이다.

-> 테이블들이 잘 만들어졌는지 평가하고 ,잘 만들지 못한 테이블을 고쳐나가는 과정
-> 테이블을 정규형 이라고 불리는 형태에 부합하게 만들어나가는 과정이다.
-> 삽입, 삭제, 갱신 할때의 발생 될 수 있는 이상현상을 방지한다.

정규화 레벨 조건에 충족하지 못하면, 다음 레벨의 정규화를 사용할 수 없다.

탄생배경

소프트웨어 크기가 커질수록 즉, 테이블과 컬럼들이 많아질수록 모델링을 잘못하거나 모델링한 테이블이 좋은지 나쁜지 판단하기 어려워진다.

정규화가 진행되지 않았을때 이상현상

정규화 단계

제1 정규화

Atomic columns 컬럼들의 값들은 원자적이여야한다.

한계 : WHERE, ORDER BY, JOIN 등 ..

<예제>

방법1

제 1 정규화 규칙에 의하여 , 속성값은 단일값을 가져야 한다. (Atomic)
다중 속성들을 새로운 튜플로 생성하여 원자성을 가지게 하는 방법

해당 속성값은 단일값을 가지지만 , 기본키를 포함한 여러 속성들이 동일한 정보를 가지고 있게 된다. (데이터 중복 발생, 키 제약조건 위반)

(X)

방법2

해당 tag 의 수 만큼 컬럼을 추가하여 저장하는 방법.

tag 의 수가 일정하지 않기 때문에 가장 많은 개수만큼 속성값을 정의해줘야 하기때문에 유연하지 않고 , 메모리 낭비가 심해질 수 있다.

(X)

방법3

잠깐 생각해보기

...

현재 Topic 과 Tag 의 관계를 보면 N:M 의 관계이다.
매핑 테이블을 만들어 관계를 형성 한다.

매핑 테이블로 인해 다중속성의 값들을 Atomic Column 조건을 충속 시킬수 있게 되었다.

(O)

제 2 정규화

No partial dependencies

! 복합키에서 특히 고려해야 할 사항

제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해한다.
완전 함수 종속이란 기본키의 부분집합이 결정자가 되어선 안된다는 것을 뜻한다.

즉 이 말은 후보키가 아닌 모든 속성이 후보키의 부분집합이 아니라 전체에 종속 되어야 한다.

예시

잠시 생각해보기

...

위의 예시를 보면 동일 데이터들이 테이블에 존재 하는데 (중복) 그 이유를 보게 되면 바로 후보키가 아닌 속성중에 후보키의 부분집합에만 종속되기 때문이다.

위의 예시에서 연보라색으로 색칠 된 부분은 title 이라는 후보키의 부분집합에 종속되고 price 라는 속성은 type 이라는 후보키의 부분집합에 종속된다.

이럴 경우 우리는 이 후보키들을 각각의 엔티티로 완전 함수 종속을 구현하고 정규화 2형 에 충족 시킬 수 있다.

제 3 정규화

No transitive dependencies (이행적 종속관계 NO!)

이행적 종속관계란 A->B, B->C 일때 A->C 가 성립되는 것을 의미한다.

위 그림을 보면 , author_name 과 author_profile 은 title 에도 종속 되지만 , author_id 에도 종속적이다.

그로인해 author_id 가 같은 튜플들은 기본키 값이 달라도 여러 컬럼들이 중복된다.

이럴경우 author 라는 엔티티(테이블)를 하나 만들어 중복값을 제거 하는것이 좋다.

profile
지속적인 발전, 태도

0개의 댓글