ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 정규화란 무엇인가?
    CS지식/데이터베이스 2021. 6. 10. 23:34

    정규화는 데이터베이스에 존재하는 릴레이션(테이블)에 무언가를 가하고 만지며 정규(정식으로 된 규정)화 한다는 것인데 무엇을 하고 왜 하는 것일까?

     

    정규화의 개념을 보면 무엇을 하고 왜 하는 것인지 알 수 있다.

    정규화란 이상 현상이 발생하는 테이블의 설계를 수정하여 정규 테이블로 만드는 과정이다.

    정규 테이블이라는 것은 관계형 데이터베이스에 저장될 데이터의 중복이 최소화된 구조를 뜻한다.

    그러면 이상 현상은 무엇일까?

    이상 현상은 데이터를 삽입, 삭제, 수정을 할 때 사용자의 예상 외의 현상이 발생하여 데이터의 일관성이 깨지는 현상이다.

    이상 현상에는 삽입 이상, 삭제 이상, 갱신 이상이 있다.

    삽입 이상은 데이터 삽입 시 특정 속성(attribute)에 해당하는 값이 없어 필요하지 않은 NULL 값을 강제로 입력하는 현상이다. 혹은 데이터를 삽입 시 NULL 값이 허용되지 않은 속성에 대한 값이 없으면 삽입을 할 수 없는 현상이다.

    NULL은 특별하게 처리되어 문제를 야기할 수 있기 때문에 가능한 테이블에 없는 것이 좋다.

     

    삭제 이상은 데이터 삭제 시 유용한 다른 데이터까지 함께 삭제되는 현상이다.

     

    갱신 이상은 중복 데이터 중에서 일부만 수정되어 데이터의 불일치 문제가 발생하는 현상이다.

     

    이러한 정규화를 진행하여 특정 제약 조건을 만족하면 미리 정의된 정규형(NF, Normal Form)에 속하게 된다.

    여기서 말하는 정규형은 제 1정규형, 제 2정규형, 제 3정규형, 보이스-코드 정규형, 제 4정규형, 제 5정규형이 있다.

    지금부터 각가의 정규형에 대해 자세히 알아보자.

     

    제 1정규형

    테이블 내의 속성값은 원자값(셀에 하나의 값만 존재)을 가지고 있어야하는 제약조건을 만족하는 것을 제 1정규형이라고 한다.

    만약에 한 셀에 여러 속성값이 있으면 제 1 정규형 제약조건을 위배했다고 볼 수 있다.

    예시를 보며 이해해보자.

     

    제 2정규형

    제 2정규형은 제 1정규형에 속하고 키에 속하지 않는 속성 모두가 기본 키에 완전 함수 종속을 만족하는 테이블이다.

    즉, 기본 키 속성과 기본 키가 아닌 속성 간의 종속관계가 있다면 이를 별도의 테이블로 분리하는 것이다.

    개념만 보면 무슨 의미인지 이해하기 어려우므로 예시를 보며 알아보자.

    정규화 이전 테이블을 보면 <고객명, 서비스 이름>이 서비스 이용 기간에 영향을 주고, <서비스 이름>이 서비스 가격에 영향을 주는 부분함수 종속 관계를 가지고 있다.

    이러한 테이블을 정규화 시키면 부분 함수 종속 관계가 제거되어 완전 함수 종속이 되므로 제 2정규형이 된다.

     

     

    제 3정규형

    제 3정규형은 제 2정규형을 만족하고 키에 속하지 않는 모든 속성들이 기본 키에 이행적 종속이 아닌 테이블이다.

    (이행적 종속 관계: A->B이고 B->C일 때 A->C를 만족하는 관계)

    예시를 보며 이해해보자.

    정규화 이전 테이블을 보면 책번호가 출판사에 영향을 주고 출판사가 출판사회사위치에 영향을 주는 관계인

    A->B이고 B->C이면서 A->C 관계가 있는 이행함수 종속 관계가 존재한다.

    이행함수 종속 관계를 제거하는 정규화를 진행하여 테이블을 분리하면 제 3정규형을 만족하게 된다.

    'CS지식 > 데이터베이스' 카테고리의 다른 글

    트랜잭션이란 무엇인가?  (0) 2021.06.16
    [MySQL] 날짜, 시간 표기 방식 지정하기  (0) 2021.06.13
    ER 모델이란 무엇인가?  (0) 2021.06.07
    관계 대수란 무엇인가?  (0) 2021.06.04
    키(key)란 무엇인가?  (0) 2021.06.01

    댓글

Designed by Tistory.