Database/데이터베이스

[Database] 데이터 종속성과 정규화

gangintheremark 2021. 12. 7. 14:24
728x90

관계데이터베이스 예시

잘못된 설계로 인한 이상(Anomaly)

  • 💡 삭제 이상 : 하나의 데이터를 삭제하면 다른 데이터도 같이 삭제됨
    ex. 200번 학생이 'C123' 과목을 등록 취소 → 200번 학생의 학년정보 소실
  • 💡 삽입 이상 : 불필요한 정보를 채워서 삽입해야함
    ex. 학번이 600, 이름이 홍길동, 2학년, 전기과인 학생 정보를 삽입
    → insert into 수강 values(600, 'NONE', 'N', 2, '홍길동','전기')
  • 💡 갱신 이상 : 하나의 속성값을 변경하려면 여러개의 투플을 갱신해야함
    ex. 400번 '송병길'의 학년을 4에서 3으로 변경 → 4개의 투플을 모두 갱신해야함

정규화의 필요성

  • Anomaly가 발생한 이유 : 상이한 종류의 정보를 하나의 릴레이션으로 표현했기 때문

정규화 : 속성들 간의 종속 관계별로 별도의 릴레이션으로 분해하는 과정 → 스키마 변환


릴레이션의 분해의 원리

  • 정보 표현의 무손실
  • 최소의 데이터 중복성
  • 분리의 원칙 : 속성들간의 의존성별로 별도의 릴레이션으로 분리

함수종속(FD)

  • 함수 종속 관계는 릴레이션이 계속해서 변경되더라도 항상 지켜지는 의미적 관계여야함
  • X(결정자) → Y(종속자) : X값을 알면 Y값도 알 수 있음

제 1정규형 (1NF)

  • 릴레이션 R에 속한 모든 도메인이 원자 값(하나의 값)으로만 되어 있는 릴레이션
  • 삽입 이상, 삭제 이상, 갱신 이상 존재

제 2정규형 (2NF)

  • 기본키에 속하지 않은 속성은 모두 기본키에 완전 함수 종속
  • 즉, 부분 함수 종속성이 발생하면 분해한다.
  • 여전히 삽입 이상, 삭제 이상, 갱신 이상 존재

제 3정규형 (3NF)

  • 릴레이션이 2NF이고 기본키에 속하지 않은 모든 속성이 기본키에 이행적 함수 종속이 아닌 경우
  • 이행적 함수 종속성 : 기본키를 제외하고 컬럼 간에 종속성이 발생하는 것

보이스코드 정규형 (BCNF)

  • 릴레이션 R의 결정자가 모두 후보키임

💡 3NF 지만 BCNF는 아닌 예

  • 삽입 이상, 삭제 이상, 갱신 이상 존재
  • 기본키(학번, 과목)이 교수를 함수적으로 종속하고 있다. 이 떄, 교수가 후보키(최소성과 유일성 만족)이고, 교수가 과목번호를 함수적으로 종속하는 경우 분해가 일어난다. 즉, 위와 같은 경우 <교수>테이블을 새롭게 만들고, 기본키는 교수로 하고 컬럼은 과목번호가 된다. 이러한 작업을 BCNF 라고 한다.

 

최종 분해결과


정규화의 수준

728x90