본문으로 바로가기

DB 정규화를 통한 관계 재구성

category Database 2019. 5. 2. 10:19
    반응형

    정규화란?

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

    • 정규화는 이상이 있는 관계를 재구성하여 잘 조직된 관계를 생성하는 것에 그 목표가 있다.
    • 정규화란 제대로 조직되지 않은 테이블들과 관계들을 작고 잘 조직된 테이블과 관계들로 나누느 것을 포함한다.
    • 제 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 이면 이행함수(적) 종속이라고 한다.

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

      • 유일성 : 레코드에서 유일하게 식별해낼 수 있음.
      • 최소성 : 더 이상 줄일 수 없다는 것은 어느 하나라도 제외될 경우 유일성을 확보 할 수 없음.
      • 슈퍼 키 유일성은 만족하나 최소성은 만족하지 않음.
      • 후보 키 유일성과 최소성을 만족함. (예 : 주민번호, 주민번호)
      • 복합키 2개 이상의 필드로 조합하여 만든 후보키를 복합키라고 한다.
      • 기본 키 후보키 중에서 선정되어 사용되는 키
      • 대체키 후보키 중 기본키로 선택되지 않은 나머지 키 (예 : 사원번호가 기본키일 때 주민등록번호)
      • 외래키 한 테이블(릴레이션)에 속한 속성, 외래키(FK)가 다른 참조 테이블(릴레이션)의 기본키(PK)일 때 그 속성키를 외래키(Foreign Key)라고 함.
      • 인조키 식별자가 없어 따로 속성을 사용하여 기본키로 지정함.

    이상 현상 제거

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

    갱신 이상

    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를 통해 결정되는 값들의 집합이어야 한다.

    [참고]

    https://ko.wikipedia.org/wiki/데이터베이스_정규화

    https://m.blog.naver.com/PostView.nhn?blogId=battle50&logNo=220590540331&proxyReferer=https%3A%2F%2Fwww.google.com%2F

    반응형