1. 릴레이션 정규화
    1. 갱신 이상(update anomaly) 유발  <-  데이터 중복
    2. 정규화(normalization) : 함수적 종속성과 기본키를 기반으로 분석하여 릴레이션을 분해함으로써 중복과 세 가지 갱신 이상을 최소화
  2. 갱신 이상(update anomaly) -> 정규화를 해야 할 이유
    1. 수정 이상(modification anomaly)
      1. 반복된 데이터 중에서 일부만 수정하면 데이터의 불일치 발생
    2. 삽입 이상(insertion anomaly)
      1. 불필요한 정보를 함께 저장하지 않고는 어떤 정보의 저장 불가능
    3. 삭제 이상(deletion anomaly)
      1. 유용한 정보를 함께 삭제하지 않고는 어떤 정보의 삭제 불가능
  3. 정규화 사례 1

    1. 갱신 이상
      1. 정보의 중복
        1. 사원이름, 사원번호, 주소, 전화번호 등이 중복되어 저장됨
      2. 수정 이상
        1. 부서명을 바꿀때(예 기획->홍보) 김창섭, 이수민의 부서이름1이 모두 바뀌어야 함
      3. 삽입 이상
        1. 새로운 부서를 신설할때(홍보 신설) 사원이 없으면 등록이 불가능
        2. 이 릴레이션은 부서와 사원이 동시에 등록되어야만 하기 때문
      4. 삭제 이상
        1. 사원이 1명뿐인 부서의 사원을 삭제하면(영업 삭제) 영업부는 사라짐
    2. 릴레이션의 분해
      1. 하나의 릴레이션을 두 개 이상의 릴레이션으로 나누는 것
      2. 원리 릴레이션 <=> 분해된 릴레이션 : 상호 변환을 보장
      3. 함수적 종속성에 관한 지식을 기반으로 릴레이션 분해
      4. 사원 릴레이션을 분해한 결과 예
    3. 갱신 이상 문제 해결
      1. 정보의 중복 : 여전히 중복됨
      2. 수정 이상 : 부서이름을 변경해도 됨
      3. 삽입 이상 : 새로운 부서 추가 가능
      4. 삭제 이상 : 영업부인 김창섭을 삭제해도 영업부는 남아 있음
  4. 정규형(normal form)의 종류
    1. 제1정규형(first normal form)
    2. 제2정규형(second normal form)
    3. 제3정규형(third normal form)
    4. BCNF(Boyce-Codd normal form)
    5. 제4정규형(fourth normal form)
    6. 제5정규형(fifth normal form)
    7. 일반적으로 BCNF까지만 고려함
  5. 관계 데이터베이스 설계의 비공식적인 지침
    1. 이해하기 쉽고 명확한 스키마를 만들라
    2. 널 값을 피하라
    3. 가짜 투플이 생기지 않도록 하라
    4. 스키마를 정제하라
  6. 결정자(determinant)
    1. 결정자는 다른 애트리뷰트의 값을 고유하게 결정하는 애트리뷰트를 의미
    2. 사원 릴레이션의 사원번호는 사원이름을 고유하게 결정함
    3. A –> B 로 표기 : A가 B를 결정한다(또는 A는 B의 결정자이다)
    4. 위 사원 릴레이션에서의 결정자
      1. 표현 1
        1. 사원번호 –> 사원이름
        2. 사원번호 –> 주소
        3. 사원번호 –> 전화번호
        4. 부서번호 –> 부서이름
      2. 표현 2
        1. 사원번호 –> (사원일름, 주소, 전화번호)
        2. 부서번호 –> 부서이름
  7. 함수적 종속성(FD; Functional Dependency) 정의
    1. 정규화 이론의 핵심
    2. 릴레이션의 애트리뷰트들의 의미로부터 결정
    3. 릴레이션의 가능한 모든 인스턴스들이 만족
    4. 제2정규형부터 BCNF까지 적용
  8. 함수적 종속성 사례

    1. 애트리뷰트 A가 애트리뷰트 B의 결정자이면 B가 A에 함수적으로 종속한다
    2. 사원이름, 주소, 전화번호사원번호 함수적으로 종속된다
      1. 사원번호 –> (사원이름, 주소, 전화번호)
    3. 직책은 (사원번호, 부서번호)에 함수적으로 종속,
      사원번호에는 함수적으로 종속되지 않음

      1. (사원번호, 부서번호) –> 직책
    4. 완전 함수 종속(FFD; Full Functional Dependency)
      1. (사원번호, 부서번호) –> 직책
      2. 직책이 (사원번호, 부서번호) 전체에 종속된 것이지, 사원번호 또는 부서번호 중 하나에 종속된것이 아닐 때 완전 함수 종속
    5. 부분 함수 종속(PFD; Partial Functional Dependency)
      1. (사원번호, 부서번호) –> 사원이름
      2. 사원이름이 (사원번호, 부서번호) 전체에 종속되었고,  또한 일부인 사원번호에도 종속되었 때 부분 함수 종속
  9. 이행적 함수적 종속성(transitive FD)
    1. A가 B의 결정자이고, B가 C의 결정자일때 A가 C의 결정자인 관계를 이행적 함수적 종속이라 함
    2. A –> B 이고 B –> C 일 때 A –> C를 만족하는 관계
  10. 릴레이션 분해
    1. 무손실 분해(lossless decomposition)
      1. 분해된 두 릴레이션을 조인하면 원래의 릴레이션에 들어 있는 정보를 완전히 얻을 수 있음
      2. 손실 = 정보의 손실
    2. 다음 릴레이션을 분해
  11. 정규화 과정(참조: 데이터베이스 개론2판-김연희,한빛아카데미)
    1. 초기 릴레이션
    2. 제1정규형
      1. 모든 애트리뷰트가 원자값으로만 구성
      2. 모든 애트리뷰트에 반복그룹(repeating group)이 나타나지 않으면 제1정규형을 만족
      3. 초기 릴레이션 -> 제1정규화
      4. 갱신이상
        1. 수정이상
        2. 삽입이상
        3. 삭제이상
    3. 제2정규형
      1. 제1정규형을 만족
      2. 기본키가 아닌 모든 애트리뷰트가 기본키에 완전 함수 종속
      3. 고객아이디 –> (등급, 할인율),  (고객아이디, 이벤트번호) –> 당첨여부
      4. 어떤 후보 키에도 속하지 않는 모든 애트리뷰트들이 R의 기본키에 완전하게 함수적으로 종속
      5. 제1정규형 이벤트참여 릴레이션 -> 제2정규형
      6. 갱신이상
        1. 수정이상
        2. 삽입이상
        3. 삭제이상
    4. 제3정규형
      1. 제2정규형을 만족
      2. 기본키가 아닌 모든 애트리뷰트가 기본키에 대한 이행적 함수 종속이 안되도록
      3. 고객아이디 –> 등급 –> 할인율
        => 고객아이디 –> 등급,  등급 –> 할인율
      4. 제2정규형 고객 릴레이션 -> 제3정규형
      5. 갱신이상
        1. 수정이상
        2. 삽입이상
        3. 삭제이상
    5. BCNF(보이스/코드 정규형)
      1. 제3정규형을 만족
      2. 함수 종속 관계에서 모든 결정자가 후보키이어야 함
      3. 제3정규형인 강좌신청 릴레이션
      4. (아이디, 인터넷강좌) –> 강사번호,  강사번호 –> 인터넷강좌
        => 고객아이디 –> 강사번호,  강사번호 –> 인터넷강좌
      5. 제3정규형인 강좌신청 릴레이션 -> BCNF
    6.  제4정규형
      1. BCNF 만족
      2. 함수 종속이 아닌 다치 종속(Multi Valued Dependency)를 제거
      3. 릴레이션R에 다중 값 종속 A ->-> B가 존재할 경우 R의 모든 애트리뷰트가 A에 함수적 종속 관계를 만족하는 정규형
    7. 제5정규형
      1. 제4정규형 만족
      2. 후보키를 통하지 않는 조인 종속(JD; Join Dependency)을 제거
      3. 릴레이션 R의 모든 조인 종속이 R의 후보키를 통해서만 성립
    8. 역정규화(Denormalization)
      1. 정규화로 분해된 릴레이션을 조인해서 사용하면 속도가 떨어짐
      2. 속도의 향상을 위해 정규화에 위배되지만 릴레이션을 합치는 것을 역정규화라 함
error: Content is protected !!