개발일지

정규화(특징,목적,형태) 본문

DB

정규화(특징,목적,형태)

딸기아사이레모네이드리프레셔 2024. 2. 5. 16:04
728x90

목차

    정규화란?

    • 데이터 무결성을 유지하기 위해 중복성을 최소화하고 정보의 일관성을 보장하기 위한 개념이다. 
      *데이터 무결성: 데이터베이스 내의 데이터가 정확하고 일관되며 유효한 상태를 유지하는 것
    • 논리 데이터 모델링을 상세화하는 가장 중요한 단계이다. 
      *논리 데이터 모델링 : 업무 프로세스와 데이터 요구 사항을 분석하고, 그것을 데이터 모델로 변환하여 DB를 설계하는 단계 
    • 기본 정규형에는 1NF, 2NF, 3NF, BCNF가 있고, 고급 정규화에는 4NF,5N가 있다. 

    정규화 특징

    • 데이터 모델의 정확성, 일치성, 단순성, 비중복성, 안정성 등을 보장한다.
    • 잘못된 릴레이션을 어떻게 분해해야 하는지에 대한 판단 기준을 제공한다.
    • 데이터 모델의 단순화를 통해 편의성과 안정성, 무결성을 유지할 수 있다.
    • 유연한 데이터 구축이 가능하지만 물리적인 접근경로가 복잡해진다. 

    정규화의 목적(이상현상 제거)

    정규화의 궁극적인 목적은 데이터의 삽입, 갱신, 삭제 등에서 발생할 수 있는 이상 현상(Anomlay)을 제거하는 것이다. 

     

    삽입 이상 : 튜플 삽입 시, 관련 없는 정보도 함께 삽입해야 하는 현상 

    ex) 기본키가 CourseID일 경우, Course를 수강하지 않은 학생은 Course ID가 없는 현상이 발생한다.
          기본키는 Null값을 가질 수 없기에, 굳이 삽입하기 위해서는 '미수강'과 같은 Course ID를 만들어야 한다. 

    갱신 이상 : 튜플 갱신 시, 데이터의 불일치가 발생하는 현상

    ex) 어떤 학생의 전공이 음악에서 컴퓨터로 바꾸는 경우, 모든 전공을 컴퓨터로 바꾸어야 한다. 그러나, 일부를 깜빡하고 바꾸지 못하는 경우, 데이터의 불일치(모순)이 발생한다. 

    삭제 이상 : 튜플 삭제 시, 관련된 정보도 함께 삭제해야 하는 현상 

    ex) 어떤 학생이 수강을 철회하는 경우, 수강 철회로 인해 학생 정보 자체가 함께 삭제된다. 

     

    정규화의 형태

    1️⃣ 제 1정규화(1NF)

    ✔️ 원자 값이 아닌 값을 가지는 속성이 제거된 릴레이션 스키마
    ✔️ 릴레이션의 모든 속성의 도메인이 원자값을 가진다면 1NF에 해당
          *원자 값 : 더 이상 논리 적으로 분해될 수 없는 값

    ✔️ 제 1정규화는 원자값을 보장하기 위한 정규화로, 릴레이션이 1NF를 만족하여도 불필요한 데이터 중복으로 인해 이상 현상의 해결이 보장되지는 않는다

    2️⃣ 제 2정규화(2NF)

    ✔️ 제 1정규화를 만족하고, 모든 컬럼이 부분적 종속이 없어야한다. → 제 1정규화를 만족하고, 모든 컬럼이 완전 함수 종속을 만족한다
        *
    부분적 함수 종속이란, 기본키 중에 특정 컬럼에만 종속되는 것이다.
        * 완전 함수 종속이란, 기본키의 부분집합이 결정자가 되어선 안된다는 것이다. 

     

    위 테이블에서 기본키는 {학생번호, 과목}으로 복합키로, 성적 값을 알기 위해서는 학생번호 + 과목이 있어야 한다.
    하지만, 특정 과목의 지도교수는 과목명만 알면 지도 교수가 누군지 알 수 있다. 즉, 지도교수 컬럼은 {학생번호, 과목}에 종속적이지 않고 {과목}에만 종속되는 부분적 종속이다. 
    
    따라서 두번째 그림처럼 분해하여, 제 2정규형을 만족시킨다.

    3️⃣ 제 3정규화(3NF)

    ✔️ 2 정규화를 만족하고, 기본키를 제외한 속성들간의 이행 종속성이 없어야 한다. 

        *이행 종속성 : A→B, B→C일때 A→C가 성립하면 이행 족속이라 한다. 

    ID를 알면 등급을 알 수 있고, 등급을 알면 할인율을 알 수 있다 → ID를 알면 할인율을 알 수 있다. 
    따라서 이행 종속성이 존재하므로 제 3정규형을 만족하지 않는다.
    
    두 번째 그림과 같이 분해아여 제 3정규형을 만족시킨다.

    4️⃣ BCNF(Boyce-Codd)

    ✔️ 3정규화를 만족하고, 모든 결정자가 후보키가 되도록 테이블을 분해하는 것이다. 
    ✔️ 모든 결정자가 후보키 집합에 속한다는 뜻은, 후보키 집합에 없는 컬럼이 결정자가 되어서는 안된다는 뜻이다. 

        *후보키 : 튜플을 유일하게 식별할 수 있는 속성 또는 속성의 집합

        *결정자 : 다른 속성의 값을 결정하는데 사용되며, 이를 통해 데이터의 일관성을 유지

     

    특강수강 테이블에서 기본키는 (학생번호, 특강이름)이다. 
    그리고 기본키 (학생번호, 특강이름)는 교수를 결정하고 있다. 또한 여기서 교수는 특강이름을 결정하고 있다. 
    그런데 문제는 교수가 특강이름을 결정하는 결정자이지만, 후보키가 아니라는 점이다. 
    
    그렇기 때문에 BCNF 정규화를 만족시키기 위해서 위의 테이블을 분해해야 하는데, 다음과 같이 특강신청 테이블과 특강교수 테이블로 분해할 수 있다

    5️⃣ 제 4정규화(4NF)

    ✔️ BCNF를 만족하고, 다치종속성을 가진 속성을 제거하는 단계이다. 
        *다치종속성의 조건

        ① A->B 일 때 하나의 A값에 여러 개의 B값이 존재하면 다치 종속성을 가진다고 하고 A↠B라고 표시한다.

        ② 최소 3개의 컬럼이 존재한다.

        ③ R(A, B, C)가 있을 때 A와 B 사이에 다치 종속성이 있을 때 B와 C가 독립적이다.

     

     

    위와 같은 테이블을 보자.
    101번 학생은 자바와 C++ 과목을 수강하고, 노래와 게임을 취미로 가진다. 
    이렇게 되면 학생 번호 하나에 과목 여러 개와 취미 여러 개가 종속된다.
    이런 경우 학생 번호를 토대로 값을 조회하면 아래와 같이 중복이 발생하게 된다.
    과목과 취미는 관계가 없는 독립적인 관계이다. 하지만 같은 테이블의 학생 번호라는 칼럼에 다치 종속되어버려 중복이 발생하는 문제가 생겼다.
     
    4NF를 만족하기 위해서는 마지막 그림처럼 분해하면 된다.

     

    6️⃣ 제 5정규형(5NF)

    ✔️ 4NF를 만족하고, 조인 종속을 없애며 조인 연산을 했을 때 손실이 없어야 한다. 

        * 조인 종속 : 조인 종속은 다치 종속의 좀 더 일반화된 형태이다. 만약 하나의 릴레이션을 여러 개의 릴레이션으로 무손실 분해했다가 다시 결합할 수 있다면 조인 종속이라고 한다.

    예를 들어 A라는 릴레이션을 B와 C로 분해했다가 다시 조인했을 때 그대로 A가 된다면, 
    A는 조인 종속성이 있다고 한다.

     

     

    728x90

    'DB' 카테고리의 다른 글

    DB종류  (0) 2024.02.07
    RDMS와 NoSQL  (1) 2024.02.07
    DB개념 - 용어 정리  (0) 2024.02.05
    Comments