[DB] 정규화에 대해서

yongkini ·2021년 9월 21일
0

DataBase

목록 보기
5/5

정규화란 ?

: 이상현상을 해결하기 위해서 나쁜 릴레이션을 세분화해서 좋은 릴레이션으로 분해하는 작업이다. 정규화 과정을 거치면 정규형을 만족시키게 된다.

이상 현상이란?

: 이상 현상의 종류에는 크게
1) 갱신 이상 : 특정 튜플을 수정했는데, 그와 하나의 어트리뷰트의 값만 다른 또다른 튜플의 정보와 해당 정보의 불일치가 일어나는 것을 말한다. 예를 들어,

이름 강의코드 주소 학번 강의명
김지훈 C05 서울시 동작구 2018244232 웹 프로그래밍 입문
김지훈 C03 서울시 동작구 2018244232 데이터베이스 구조론

위와 같은 테이블이 있을 때, 강의코드 <> C05인 튜플의 주소를 '서울시 양천구'로 변경하게되면, 아래의 강의코드 C03의 동일인물의 주소 정보는 그대로 서울시 동작구인데 위의 정보는 서울시 양천구인 문제가 발생한다.


2) 삽입 이상

이름 강의코드 주소 학번 강의명
김지훈 C05 서울시 동작구 2018244232 웹 프로그래밍 입문
김지훈 C03 서울시 동작구 2018244232 데이터베이스 구조론
신미애 C06 서울시 마포구 2016232232 운영체제 베이스

위의 예시를 통해보면, 만약에 컴퓨터 공학과에 신입생이 들어왔다고 했을 때, 해당 신입생이 아직 강의를 신청하지 않은 상태라면, 해당 릴레이션에 추가를 하려면 대부분의 어트리뷰트 값에 NULL인채로 삽입을 해야하게 된다. 이는 삽입이상 현상으로, 자료를 삽입할 때 원하지 않는 정보까지 필수로 입력해야 넣을 수 있는 상황이다.

3) 삭제 이상
: 삽입 이상에서 쓴 테이블을 바탕으로 보면, 만약에 신미애라는 사람이 사정으로 인해 해당 강의 수강을 취소했다 했을 때, 주소, 학번 등의 자료는 그대로 두고 싶지만, 삭제를 하려면 다같이 삭제해야하는 현상을 말한다.

: 위와 같은 이상현상들은 정보를 중복해서 저장하게 하고, 이에 따라 공간이 낭비되도록 한다. 따라서 이러한 현상을 해결하기위해 정규화 과정이 필요하다. 그리고 이러한 정규화 과정을 거친 것을 정규형이라고 한다.

제 N정규형

  • 제1정규형 : 모든 도메인이 더이상 쪼갤 수 없는 단위인 원자값으로 되도록하는 정규형을 말한다.
    : 예를 들어, 사람의 이름과 전화번호, 그리고 학번을 적어놓은 릴레이션이 있다고 할 때, 특정 학생이 핸드폰을 하나더 구입해서 번호 두개를 하나의 속성인 전화번호에 입력하고자 하면, 그리고 이를 같은 튜플에 입력한다면, 이는 더이상 쪼갤 수 없는 도메인이 아닌 것이다. 즉, 두개의 전화번호로 쪼개지기 때문에 원자값으로 부를 수 없다. 그리고 이러한 릴레이션은 제1정규형이라고 할 수 없다. 그래서 이러한 경우를 위해 정규화를 하면, 이름과 전화번호를 관리하는 릴레이션과 이름과 학번을 관리하는 릴레이션 이렇게 두개로 세분화해서 정규화 할 수 있다.

  • 제2정규형 : 결론적으로 부분적함수종속 관계를 완전함수종속 관계로 만드는 것이 제2정규화라고 할 수 있다. 부분적 함수 종속관계란 예를 들어,

    회원 번호 제품 코드 제품 종류 수량
    AC033 D32 청바지 3
    BD321 D32 청바지 1

위의 테이블을 보면, '회원 번호', '제품 코드'가 복합키인 테이블이다. 이 때, 제품 종류 속성은 제품 코드에만 종속된 부분 함수적 종속 관계를 가진다. 이는 제2정규형에 위배되는 것인데, 그 이유는 갱신이상을 발생시킬 수 있기 때문이다. 따라서, 위 테이블을 작은 릴레이션으로 세분화해야한다. 그리고 이러한 결과로 나오는 형태를 제2정규형이라고 한다. 그리고 이러한 제2정규형은 무조건 디폴트로 제1정규형을 만족시킨 상태를 말한다.

  • 이 때 수량은 회원번호와 제품코드에 완전 함수적 종속된 속성이다.
  • 이행적 함수 종속은 간단하게 말해서, 회원정보를 통해 이름을 알 수 있고, 이름을 통해 나이를 알 수 있는 관계일 때, 삼단논법처럼 결국 회원정보로 나이를 알 수 있을 때, 이행적 함수 종속관계라고 한다.
  • 제3정규형 : 제3정규형은 제1,2정규형을 만족시키면서 이행적 함수 종속관계를 갖지 않는 것을 말한다.
학번 학과명 학과 사무실 전화번호
2013111111 철학과 02-2524-2422
2014111111 컴퓨터 공학 02-2524-2332

위와 같은 릴레이션이 있을 때, 학번을 통해 학과를 알 수 있고, 학과를 통해 학과 전화번호를 알 수 있다(이행적 함수 종속관계). 이러한 관계에서는 먼저, 삽입이상으로 단지 신입생이 들어와서 정보를 추가하려고 하는데, 학과 사무실 번호까지 같이 추가해야하는 문제가 발생하며, 삭제이상으로 신입생 자퇴를 해서 정보를 없애야하는데, 만약 특정 학과의 학생이 1명이라면 학과 사무실 전화번호 정보가 없어지는 문제가 발생한다. 마지막으로 이런식으로 데이터를 쌓으면 예를 들어, 철학과 학생이 20명이 추가된다면 똑같은 학과 사무실 전화번호 정보 20개가 추가되므로, 이와 같은 중복된 데이터도 문제고, 중복된 데이터 중에 하나라도 수정했을 때에 나머지도 수정되지 못하는 갱신이상 문제도 발생할 수 있다. 따라서, 위 테이블을 각각 학번과 학과를 묶은 릴레이션, 그리고 학과와 학과 사무실 전화번호로 묶인 릴레이션 두개로 나눠서 관리하는 것이 제3정규화이고, 그 결과로 제3정규형이 나온다.

반정규화

: 하지만, 이러한 정규화에 장점만 있는 것은 아니다. 정규화로 인해 JOIN이 오래 걸리는 일이 일어나고, 데이터 처리 속도가 느려질 수도 있다. 따라서, 이러한 경우가 심각할 때는 '반정규화'를 고려해봐야한다. 반정규화는 정규화된 엔티티, 속성, 관계를 시스템의 성능 향상 및 개발과 운영의 단순화를 위해 중복 통합, 분리 등을 수행하는 데이터 모델링 기법 중 하나이다. 그러나 이러한 반정규화 또한 과도하면, 데이터의 무결성을 헤칠 수 있다는 단점이 있으니 주의해야 한다.

마무리

: 정규화는 위와 같은 나쁜 릴레이션들을 좋은 릴레이션으로 분할해서 관리하는 것을 말한다. 이러한 정규화 과정은 나쁜 릴레이션으로인해 발생하는 데이터 중복 그리고 그에 따란 저장 공간 낭비 이에 더하여 각종 이상현상(갱신, 삭제, 수정)들을 막아준다.

참고 블로그

종속관계 관련 용어정리
정규형에 대한 설명

profile
완벽함 보다는 최선의 결과를 위해 끊임없이 노력하는 개발자

0개의 댓글