본문 바로가기
Backend/DataBase

DB - 정규화

by YERIEL_염주둥 2020. 4. 1.
728x90

요새 마스크를 쓰고 수업을 진행하다 보니 처음 듣는 단어에 대해 확실성이 떨어진다ㅋㅋㅋㅋ

PPT 보여주기 전에 정규화를 얘기해주시는데 정교화인지 정규화인지 진짜 많이 헷갈렸네

** 정규화는 중복 값이 한 테이블에 같이 존재하는 예상 하에 시작한다. **

1. 정규화 (normalization)

정규화는 간단히 이상 현상을 없애려고 하는 것, 중복된 데이터를 제거하는 것
데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위해 테이블을 분해하는 과정
관련 있는 속성으로만 구성해야 함 - 함수적 종속성을 판단하여 정규화를 수행한다.

 

2. 이상 현상 (anomaly)

불 필요한 데이터의 중복으로 릴레이션에 발생하는 부작용

① 삽입 이상 : 릴레이션에 새 데이터를 삽입할 때 불필요한 데이터도 삽입해야 하는 문제
                - 필요치 않게 쌓이다가 중복이 발생할 수 있음

② 갱신 이상 : 릴레이션의 중복된 튜플 중에 일부분만 수정하여 데이터가 불일치 해지는 문제
                 - 결국 그에 맞는 식별자로 데이터를 찾을 수 없는 경우가 발생

③ 삭제 이상 : 릴레이션에서 튜플을 삭제하면 꼭 필요한 데이터까지 손실되는 연쇄 삭제 현상이 발생하는 문제

 

3. 함수적 종속성 (Functional Dependency)

속성들 간의 관련성

① X가 Y를 함수적으로 결정한다.  
    릴레이션 내의 모든 튜플을 대상으로 하나의 X값에 대한 Y값이 항상 하나

② 함수 종속 관계 판단
    기본키로 판단하여 select라고 생각하면 된다.

· 고객 아이디가 고객 이름, 등급을 select 할 수 있다. ☞☞☞☞☞ 고객 아이디  : X , 고객 이름, 등급 : Y
· 속성 자체의 특성과 의미를 기반으로 함수 종속성을 판단해야 한다. ☞ 명확한 기준이 있는 것이 아니기 때문에 기준을 · 판단할 수 있는 사고가 필요하다. think ^-<
· 속성 값은 계속 변할 수 있기 때문에 현재 릴레이션에 포함된 속성 값만으로 판단하면 NoNo
· 일반적으로 기본키와 후보 키가 릴레이션의 다른 모든 속성들을 함수적으로 결정함
· 기본키나 후보키가 아니어도 다른 속성 값을 유일하게 결정하는 속성은 함수 종속 관계에서 결정자가 될 수 있다.

③ 완전 함수 종속
    일반적으로 함수 종속은 완전 함수 종속을 의미한다. 
    릴레이션에서 Y 가 X에 함수적으로 종속되어 있지만 X의 전체가 아닌 일부분에는 종속되지 않음

④ 부분 함수 종속
    릴레이션에서 Y가 X의 전체가 아닌 일부분에도 함수적으로 종속된다.}
    부분 함수 종속이라면 분리될 수 있다.

완전 함수 종속 / 부분함수 종속

⑤ 식별자는 식별자 제외 나머지 속성들만 고려한다.

⑥ 무손실
    의미적으로 동등한 릴레이션들로 분해되어야 하고 분해로 인한 정보 손실이 일어나면 안 됨
    분해된 릴레이션을 자연 조인하면 분해 전의 릴레이션으로 복원이 가능해야 한다.

식별이 불가능하면 테이블을 분리해야 한다.

** 정규화는 중복을 제거하는 것이지 종속을 제거하는 것이 아니다 **

4. 정규형 (Normal Form)

릴레이션이 정규화된 정도
각 정규형 마다 제약조건이 존재해서 릴레이션 특성을 고려하여 적합한 정규형을 선택해야 한다.
보통 3 정규화까지 하고 좀 빡세면 BCNF 
정규형이 너무 많으면 그만큼 제약 조건이 많아져서 조인을 많이 해야 하고 그에 따른 정보처리 속도가 떨어짐

 

1] 제 1정규형 (1NF)

제 1정규형 (1NF)

① 릴레이션의 모든 속성이 더는 분해되지 않는 원자 값을 가지면 제 1정규형 - 따라서 애초에 원자값으로 릴레이션 속성을 만들었더면 제 1정규형 !
② 제 1정규형을 만족해야 관계 데이터베이스 릴레이션이다.
③ 제 1정규형에 이상 현상이 발생하는 이유 : 완전 함수 종속이 아니라 부분 함수 종속이 존재하기 때문이다.
④ 문제 해결 방법 : 부분 함수 종속이 제거되도록 릴레이션 분해 → 분해된 릴레이션은 제 2정규형에 속하게 된다.

 

2] 제 2정규형 (2NF)

제 2정규형(2NF)

① 릴레이션이 제 1정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속이 되면 제 2정규형 - 복합 키가 존재할 때 신경 많이 써야 한다. /*요고요고 기사시험에 나온다고 함 */
② 제 2정규화에 이상 현상이 발생하는 이유 : 이행적 함수 종속이 존재하기 때문이다.
   ** 이행적 함수란 X Y, Y Z라면 X Z가 성립 ; Z가 X에 이행적으로 함수 종속된다. **

이행적 함수 종속

③ 문제 해결 방법 : 이행적 함수 종속이 제거되도록 릴레이션 분해  → 분해된 릴레이션은 제 3 정규형에 속하게 된다.

 

3] 제 3정규형 (3NF)

제 3정규형(3NF)

① 릴레이션이 제 2정규형에 속하고, 기본키가 아닌 모든 속성이 키본키에 이행적 함수가 종속되지 않으면 제 3정규형
② 제 3정규형까지만 진행해도 이상 현상이 적음 (안 생기는 것이 아니라 적음) 
③ 고객 아이디 테이블에서 외래 키 등급으로 할인율에 접근할 수 있음  → 무손실

 

4] 보이스/코드 정규형 (BCNF)

① 하나의 릴레이션에 여러 개의 후보키가 존재하는 경우, 제 3정규형까지 모두 만족해도 이상 현상이 발생할 수 있다. 

BCNF

② 제 3정규형보다 더 엄격한 제약 조건을 제시
③ 구조 모양이 제 3정규형과 비슷하지만 다름!! 헷갈리면 안 돼

BCNF

5] 제 4정규형

① BCNF을 만족하면서, 함수 종속이 아니라 다치 종속을 제거하면 제 4정규형
② 그러나 나는 다치 종속이 뭔지 모르니 그냥 이런 게 있구나 하고 넘어가겠음

6] 제 5정규형

① 제 4정규형을 만족하면서 후보키를 통하지 않은 조인 종속을 제거하면 제 5정규형

 

5. 정규화 시 주의사항

① 모든 릴레이션이 제 5정규형에 속해야만 바람직한 것은 아니다.
② 대체적으로 제 3정규형이나 BCNF에 속하도록 릴레이션을 분해하여 데이터 중복을 줄이고 이상현상을 해결 하는 경우가 많다.

 

6. 정규화와 반정규화

테이블을 통해 테이블이 엄청 많은 상태에서 빈번하게 검색하는 과정이 조인의 관계가 엄청 많으면 한 테이블에 컬럼 하나를 추가해서 데이터를 추가해서 검색하는 것 반정규화라고 한다. 물론 조인이 적기 때문에 검색 속도는 빠르지만 반정규화가 많이 일어나면 테이블 관리가 어려우니 잘 생각해서 사용해야 한다.

반응형

'Backend > DataBase' 카테고리의 다른 글

DB - VIEW  (0) 2020.04.06
DB 서브쿼리 sub Query & UNION  (0) 2020.04.01
DataBase 데이터베이스 설계  (0) 2020.03.25
DB 생성 문장 및 사용자 계정 접근 권한 부여  (0) 2020.03.19
MySQL 내장함수  (0) 2020.03.18

댓글