본문으로 바로가기

정규화

category Database 2020. 1. 29. 20:01
    반응형

    정규화란?

    관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화라고 한다.

    • 정규화는 이상이 있는 관계를 재구성하여 잘 조직된 관계를 생성하는 것에 그 목표가 있다.
    • 정규화란 제대로 조직되지 않은 테이블들과 관계들을 작고 잘 조직된 테이블과 관계들로 나누느 것을 포함한다.
    • 제 3정규화가 되었으면 '정규화 되었다'라고 한다. 3NF 테이블의 대부분이 삽입, 변경, 삭제 이상이 없으며 3NF 테이블의 대부분이 BCNF, 4NF, 5NF이다. (6NF은 아니다.)

    정규화를 통한 다양한 질의 가능

    데이터 구조의 복잡성이 완전히 제거되었을 때 질의 표현이 가능해지고 (SQL 작성이 가능해진다는 의미인 듯) 수행됨에 있어서 더욱 강력하고 유연해진다.

    배경지식

    • 함수 종속성 관계 스키마 중에서 어느 속성군의 값이 정해지면 다른 속성군의 값이 정해지는 것.

      X → Y, X가 정해지면 Y값이 정해지는 것을 함수종속성이라 한다.

      주민번호를 알면 이름과 주소를 알 수 있다 여기서 이름과 주소는 주민번호에 함수 종속적이다.

      주민번호 → 이름, 주소 여기서 주민번호를 결정자 이름,주소를 종속자라고 한다. ( 이러니 좀 이해가 되는데..?)

    • 자명한 함수 종속성 속성들의 부분집합이 함수 종속성을 가질때, 자명한 함수 종속성(FD)이라고 한다. {직원 ID}->{직원 생일} 이면 {직원 ID, 직원 주소}->{직원 생일} 은 자명하다.

    • 완전함수 종속성 A, B가 각각 관계 R의 속성이고 B가 A에 함수 종속(A→B)인 경우, A의 임의의 부분 집합에 대하여 B의 어떤 값도 A의 부분 집합의 값에 대응하지 않으면 B는 A에 완전함수(적) 종속이라고 한다.

      [사원번호, 부서번호]를 통해서만 [직책]을 알아 낼 수 있고 [직책]은 [사원번호] 혹은 [부서번호 ]하나만으로는 알 수 없다.

      {A, B} → C 일때, {A → C} 또는 {B → C}가 성립되지 않는 경우를 말한다.

    • 부분 함수 종속성 ****A, B가 각각 관계 R의 속성이고 B가 A에 함수 종속(A→B)인 경우, A의 임의의 부분 집합에 대하여 B의 어떤 값이 A의 부분 집합의 값에 대응하는 경우 B는 A에 부분함수 종속이라고 한다.

      {학번, 과목코드} -> 성적 완전 함수 종속성

      {학번, 과목코드} -> 학부 부분 함수 종속성

      {학번, 과목코드} -> 등록금 부분 함수 종속성

      {*학번 }-> 학부*

      {*학번 }-> 등록금*

    • 이행함수 종속성 A->B 이고 B->C 일 경우에만 A->C 이면 이행함수(적) 종속이라고 한다.

    • 슈퍼키 > 후보키 > 기본키

    이상 현상 제거

    테이블을 수정(갱신, 삽입, 삭제)시 원치 않던 부작용 발생할 수 있다.

    갱신 이상

    Employee 519 는 다른 레코드에서 다른 주소를 가지고 있다. EmployeeID로 특정 EmployeeAddress가 지정되는 것이 아니므로 완전 함수 종속성이 아니다.

    삽입 이상

    새로운 교수인 Dr. Newsome 은 최소한 하나의 코스를 강의하게 되어있지만, 삽입하고자 하는 새로운 레코드에는 없다. FacultyID → CourseCode가 정해지는 것이 아니기 때문에 완전함수 종속성이 아니다.

    삭제 이상

    Dr. Giddens의 모든 정보가 그가 ENG-206 강의를 중단시 삭제된다.

    정규화 과정

    제 1정규형

    다치 속성을 제거한 릴레이션, 다치 속성은 하나의 컬럼에 여러 속성이 저장된 경우를 의미한다.

    • AUTHORIZION_CODEA,B,C,D로 데이터가 저장되어있다. 이런 데이터 저장을 제거하는 것이다.

    제2정규형

    완전함수 종속성만 존재하는 릴레이션. 즉 부분함수 종속성을 제거하면 된다.

    제3정규형

    이행적 함수 종속성을 제거하면 된다. A → B → C, A→C인 이행적 함수 종속을 분리 시킨다.

    BCNF 릴레이션

    후보키가 아닌 결정자를 제거함.

    • 정규화 과정에서 주의할 점은 정규화를 통해 분해된 릴레이션들이 조인을 통해 원래의 구조로 복원될 수 있어야 한다는 것이다.

    ⇒ 결론은 제 3정규형의 경우 '정규화가 되었다.'라고 말하고, 제 3정규화 시 BCNF, 제4정규화, 제5정규화까지 만족되므로 제3정규형까지의 과정을 잘 숙지하면 된다. 제3정규화가 되기 위해서는 다치 속성 제거, 완전함수종속성 형태의 릴레이션이면 된다. 즉, 하나의 테이블에 저장되는 속성들은 PK를 통해 결정되는 값들의 집합이어야 한다.

    정규화를 하지 않을 때

    • 프로그램 속도를 위해 정규화를 하지 않고 하나의 테이블로 사용
    반응형