[CS공부] 22.10.13

minyoon·2022년 10월 17일
0

CS공부

목록 보기
7/12

DB 정규화


정규화: DB의 중복을 제거하는 것(1 ~ 5 정규화)

제 1 정규화

  • 모든 칼럼이 원자값을 가져야함(한 레코드의 취미 칼럼에 영화보기,산책하기 같이 넣으면 안됨)
  • 정규화 방법
    • 필드를 여러개 만든다.(취미1, 취미2)
    • 2개 레코드 만들고 취미 필드값만 다르게 한다.
    • 취미 테이블을 만들고 M:N으로 연결한다. (연결테이블까지 생성, 총 2개테이블 새로 생성)

제 2 정규화

  • 부분 종속성 제거
  • 기본키의 부분집합이 결정자가 되어선 안된다.
  • (ex. 택시 이용정보를 저장하는 테이블은에서 택시 번호, 운행일시가 복합 기본키라고 할때 택시 마다 번호, 차종, 회사와 같은 정보를 같은 테이블 모두 저장하면 택시 번호가 택시 정보의 다른 필드값의 결정자가 되므로 부분 종속성이 생김)
  • 정규화 방법
    • 부분 종속성을 가진 테이블을 뺀다. (택시번호, 운행일시, 가격 등만 남기고 택시 테이블 따로 빼기)

제 3 정규화

  • 이행적 종속성 제거( A → B → C인 관계 제거)
  • A → B → C인 관계 예시 (주민등록번호 → 주소 → 집값)
  • 정규화 방법
    • A, B + B,C 테이블로 나눈다. (주민등록-주소 + 주소+집값)
  • 제3정규화를 하는 이유: A,B,C가 한테이블에 있으면 주소가 바뀔 때 주소 + 집값을 모두 바꿔야 한다. 테이블을 나누면 주소-집값 테이블에서 레코드의 생성/삭제만 하면 된다.

BCNF 정규화

  • 제 3정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해
  • ex) 학번 - 과목코드 - 교수명 테이블이 있다. 한 교수는 한 과목을 담당하며, 한명의 학생은 한 교수에게 최대 한 수업을 들을 수 있고, 교수명은 중복되지 않는다. 한과목을 여러 교수가 교육할 수 있고, 학생은 같은 과목은 한번만 듣는다. 이렇다면 후보키는 (학번, 과목코드), (학번, 교수명) 이 있다. 이때 교수는 후보키가 아니지만 과목코드를 결정하는 결정자이므로 결정자지만 후보키가 아닌 상황이 발생해 BCNF 정규형을 만족하지 않는다. 따라서 테이블을 학생-교수명 교수명-과목코드로 바꿔야 한다.

관계형 데이터 모델링 - 6.4. 제3 정규화

[DB] 8. 정규형 (1NF, 2NF, 3NF, BCNF)

무결성


  • 데이터의 정확성 또는 유효성
  • 일관된 데이터베이스 상태를 정의하는 규칙들을 묵시적 or 명시적으로 정의

무결성 제약조건


  1. 도메인 무결성
    • 각 애트리뷰트 값은 반드시 원자값이어야 한다.
    • 속성의 기본값, 가능한 값들의 범위를 정할 수 있다.
  2. 키 무결성
    • 키 애트리뷰트에 중복된 값이 존재하면 안됨
  3. 엔터티 무결성
    • 기본키를 구성하는 애트리뷰트는 NULL을 가질 수 없고 유일해야한다.
  4. 참조 무결성
    • 릴레이션 R2의 외래키가 R1의 키를 참조할 때 참조하는 키가 R1의 기본키이거나 NULL 값이어야 한다.
profile
궁금한게 많은 사람🧐

0개의 댓글