Networks/MySQL&DB

SK networks AI Camp - 데이터 베이스 정규화

코딩하는 Español되기 2024. 7. 18. 08:10

2024.07.17 - [컴퓨터 공학/Networks] - SK networks AI Camp - 데이터 모델링 & ERD

데이터 베이스 정규화

: 데이터의 중복을 최소화하게 데이터를 구조화하는 프로세스

○ 목표

 : 이상이 있는 관계를 재구성해서 작고 잘 조직된 관계를 생성하는 것

○ 목적

  : 불필요한 데이터를 제거하고, 데이터 중복을 최소화하여 저장공간, 자원을 효율적으로 사용하기 위함

    삽입/갱신/삭제 시 발생할 수 있는 이상 현상을 방지하기 위함

○ 과정

아래 사진과 같이 진행되며 보통 1NF ~ 3NF까지 진행하거나 BCNF단계까지 진행

    ● 제 1정규형

      : 테이블의 컬럼이 원자값(하나의 값)을 갖도록 테이블을 분해하는 것

    ● 제 2정규형

      : 제 1정규형을 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것

        * 완전 함수종속 : 기본키의 부분집합이 결정자가 되어서는 안되는 것

<아래 테이블 기준>

기본키 : (학생번호, 강좌이름) ← 복합키

성적이 기본키를 결정 ==> (학생번호, 강좌이름) → (성적)

강의실이라는 칼럼기본키의 부분집합인 '강좌이름'에 의해 결정될 수 있음 ==> (강좌이름) → (강의실) 

    ● 제 3정규형

      : 제2정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해한 것

       * 이행적 종속 : A → B, B → C가 성립할 때 A → C가 성립되는 것

기존 테이블에서 (학생번호)는 (강좌 이름)을 결정하고있고, (강좌이름)은 (수강료)를 결정

그렇기 때문에 이를 (학생번호, 강좌이름) 테이블과 (강좌이름, 수강료) 테이블로 아래와 같이 분해해야 한다.

    ● BCNF 정규화

      : 제3정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것

특강 수강 테이블에서 기본키 : (학생번호, 특강이름)

기본키는 (교수)를 결정, (교수)는 (특강이름)을 결정

하지만 여기서 문제는 (교수)가 (특강이름)을 결정하는 결정자이지만, 후보키가 아니다.

따라서 BCNF 정규화를 만족시키기 위해 위의 테이블을 아래와 같이 (특강신청)테이블과 (특강교수)테이블로 분해