정규화(Normalization)

한준수·2023년 5월 28일
0

SQLD

목록 보기
8/31

함수적 종속성(Functional Dependency)

  • 데이터들이 어떤 기준값에 의해 종속되는 현상

정규화

반복적인 데이터를 분리하고 각 데이터가 종속된 테이블에 적절하게 배치되도록 하는 것.

데이터의 중복속성을 제거하고 결정자에 의해 동일한 의미의 일반속성이 하나의 테이블로 집약되므로 한 테이블의 데이터 용량이 최소화되는 효과가 있다.
따라서 정규화된 테이블은 데이터를 처리할 때 속도가 빨라질 수도 있고 느려질 수도 있는 특성이 있다.

데이터 처리(DML)의 성능은 향상되고, 조회는 향상 또는 저하될 수 있다.

제1정규형

릴레이션에 속한 모든 속성의 도메인이 원자 값으로만 이루어져 있으면 제1정규형을 만족한다.

  • 같은 성격, 내용의 컬럼이 연속될 때 해당 컬럼을 제거하고, 테이블을 생성.

도메인 : 하나의 속성이 가질 수 있는 모든 값.
ex) 성별 속성에 F,M 또는 고등학교 학년이라는 속성에 1학년,2학년,3학년

도메인의 개수가 유한한 경우도 있지만 무한한 경우도 있다.

원자 값 : 속성값이 더 이상 논리적으로 분해될 수 없는 값.

릴레이션에서의 모든 열과 행의 위치에서 있는 데이터 값은 단 하나의 값만 가질 수 있다.
ex)고등학교 학년 이라는 속성이 도메인으로 {1학년,2학년}과 같이 다중값을 가질 수 없다.

제2정규형

릴레이션이 제1정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전함수 종속되면 제2정규형에 속함.

  • 완전함수 종속
    기본키를 구성하는 모든 속성이 있어야만 기본키가 아닌 다른 속성이 결정되는 것.
  • 부분함수 종속
    기본키의 일부만 있어도 기본키 외의 다른 속성이 결정되는 것.

ex)
테이블1[학번,과목번호,성적,등급,교수명]

위와 같은 릴레이션이 있다고 할 때
성적과 등급이 결정되려면 학번, 과목번호 속성이 모두 있어야 하며, 이와 같은 관계를 완전함수 종속이라고 한다.

교수명 같은 과목번호만 있어도 어떤 수업인지 알 수 있으니 학번을 굳이 알 필요가 없다.
이러한 관계를 부분함수 종속이라고 하며

제2정규형을 만족한 테이블의 형태는 아래와 같다.
테이블1[학번,과목번호,성적,등급]
테이블2[과목번호,교수명]

제3정규형

릴레이션이 제2정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않으면 제3정규형

  • 이행적 함수 종속
    A➡B, B➡C 이란 종속 관계가 있을 경우, A➡C 가 성립되는 종속관계
    즉, A를 알면 B를 알고 그를 통해 C를 알 수있는 경우

ex)

상품번호 상품명 소분류 대분류
A001 검은 셔츠 상의 의류
A002 기계식 키보드 키보드 전자제품
A003 치킨 버거 햄버거 식품
이 릴레이션에서 '상품번호'를 알면 '소분류'를 알 수 있고, '소분류'를 알면 '대분류'도 알수 있다. 따라서 상품번호를 알면 대분류를 알 수 있으므로 이행적 함수 종속관계이다.

이행적 함수 종속이 있으면 데이터베이스의 시스템 혹은 논리적 구조에 문제가 발생할수 있고, 이를 흔히 이상 현상이라고 한다.

이상 현상 : 데이터베이스에서 데이터의 삽입 수정 삭제 연산을 수행할 때 발생할 수 있는 문제.

삽입 이상 : 새로운 소분류와 대분류의 정보를 넣고 싶은데 아직 상품이 정해져 있지 않을 경우 상품번호가 없으면 개체 무결성 위반(기본키는 null값을 허용하지 않음)이기 때문에 삽입할 수 없다.
수정 이상 : 햄버거의 대분류를 식품에서 패스트 푸드로 변경하고자할 때 모든 데이터에 대해서 일괄적으로 변경해야한다. 그렇지 않으면 데이터 불일치의 오류가 발생한다.
삭제 이상 : 특정 상품번호를 삭제하고 싶은데 어떤한 대분류 혹은 소분류의 정보를 가진 상품번호가 하나 밖에 존재하지 않을 때, 상품번호만 삭제하고싶지만 상품명, 소분류, 대분류가 같이 삭제되는 문제가 발생한다.

BCNF(Boyce-Codd Normal Form)

릴레이션이 제3정규형에 속하고 함수 종속 관계에서 모든 결정자가 후보키이면 보이스코드 정규형에 속한다.

profile
빅데이터과 1학년

0개의 댓글