ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • DB - 정규화
    CS/DB 2021. 2. 11. 23:04

    DB - 정규화


    정규화

    • 관계형 데이터베이스에서 중복을 최소화하기 위해 데이터를 구조화 하는 작업. 

    • 이상 현상 발생 가능성을 줄이는 것이 목표이다. 

    • 정규형의 조건

      1. 무손실 조인을 보장해야 한다. (하나의 릴레이션을 분해하고 다시 조인했을 때 데이터 손실이 없어야 한다.)
      2. 함수적 종속성을 보존해야 한다. 

     

    이상현상

    1. 삽입 이상
      • 테이블에 데이터를 삽입할 때 의도와는 상관없는 불필요한 값들을 함께 저장하지 않고서는 어떤 정보를 저장하는 것이 불가능한 경우.

      • ex) 학번, 과목 동아리로 구성된 학생 테이블에서 새로운 동아리가 신설되고 아직 동아리원이 한 명도 없는 경우에 새로운 동아리를 등록하기 위해서는 학번, 이름값이 필요하다.
    2. 삭제 이상
      • 테이블에서 한 튜플을 삭제할 때 의도와는 상관없는 값들도 함께 삭제되는 경우.(연쇄 삭제)

      • ex) 동아리a에 속한 인원이 단 한명일대 그 인원을 삭제하면 동아리a에 대한 정보도 사라진다.

    3. 갱신 이상

      • 테이블에서 튜플에 있는 속성 값을 갱신할 때 일부 튜플의 정보만 갱신되어 정보에 불일치성이 생기는 경우.

      • ex) 학생a의 동아리가 b에서 c로 변경되었을 경우 모든 튜플에서 학생a의 동아리를 c로 변경해주지 않으면 불일치성이 생기게 된다.

     

    함수적 종속성

    • 테이블 R에서 X와 Y를 임의의 애트리뷰트 집합이라고 할 때, X의 값이 Y의 값을 유일하게 결정한다면 X는 Y를 함수적으로 결정한다 라고 하고 X -> Y로 표기한다.

     

     

    제 1정규형

    • 모든 속성의 도메인이 원자값 만으로 되어있는 정규형이다. 

     

    제 2정규형

    • 테이블 R이 제 1정규형이고, 기본키가 아닌 모든 속성이 기본키에 대해 완전 함수적 종속을 만족하는 정규형이다.

    • 완전 함수적 종속이란 X -> Y라고 가정했을 때, X의 어떠한 속성을 제거하면 더 이상 함수적 종속성이 성립하지 않는 경우를 말한다. 

     

    제 3정규형

    • 테이블 R이 제 2정규형이고, 기본키가 아닌 모든 속성이 기본키에 대해 이행 함수적 종속을 만족하지 않는 정규형이다.

    • 이행 함수적 종속이란 X -> Y, Y -> Z의 경우에서 추론될 수 있는 X -> Z의 종속 관계를 말한다. 

     

    BCNF 정규형

    • 테이블 R이 제 3정규형이고, 모든 결정자가 후보키인 정규형이다. 

     

    제 4정규형

    • 테이블 R이 BCNF정규형이고, 다중 값 종속이 존재하지 않는 정규형이다.

    • 다중 값 종속이랑 X -> Y, X -> Z인 경우이다. 이럴 때 R1(X, Y) R2(X, Z)로 분해한다.

     

    제 5정규형

    • 테이블 R이 제 4정규형이고, 모든 조인 종속이 후보키를 통해서만 성립이 되도록 한 정규형이다.

     

    정규화의 장단점

    • 장점

      1. 이상 현상이 발생하는 문제점을 해결할 수 있다. 

      2. 데이터베이스 구조 확장이 용이하다. 
    • 단점
      1. 릴레이션간 연산(Join)이 많아진다. 이로 인해 응답 시간이 느려질 수 있다.
      2. 조회하는 SQL문장에서 조인이 많이 발생하여 이로 인해 성능 저하가 나타나는 경우 무결성이 깨지지 않는 한에서 반정규화를 적용하는 전략이 필요하다.

     

     

    reference

    github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Database#%EC%A0%95%EA%B7%9C%ED%99%94%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C

    velog.io/@hygoogi/%EA%B8%B0%EC%88%A0-%EB%A9%B4%EC%A0%91-%EC%A7%88%EB%AC%B8-%EB%AA%A8%EC%9D%8C#%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4

    goodgid.github.io/DB-Normalization(1)/

    goodgid.github.io/DB-Normalization(2)/

    1000hg.tistory.com/36

     

    'CS > DB' 카테고리의 다른 글

    DB - 파티셔닝과 샤딩  (0) 2021.02.12
    DB - NOSQL  (0) 2021.02.12
    DB - 스키마  (0) 2021.02.12
    DB - ORM  (0) 2021.02.11
    DB - Join  (0) 2021.02.11

    댓글

Designed by Tistory.