데이터베이스 정규화

정규화를 하는 이유?

한 릴레이션에 여러 엔티티의 애트리뷰트들을 혼합하게 되면 정보가 중복 저장되고, 이는 저장 공간을 낭비시킨다. 또한, 중복된 정보로 인해 갱신 이상이 발생되며, 동일한 정보를 한 릴레이션에는 변경하고, 나머지 릴레이션에서는 변경하지 않은 경우 어느 것이 정확한지 알 수 없다. 이 때문에 정규화 과정을 거쳐 해결한다.

갱신 이상의 종류

<회원> 테이블

학번(PK)이름클래스강사과목명
1홍길동A신다람쥐넥슨 취직 대비
2신첨지B이노드웹 어플리케이션
3김아무B이노드웹 어플리케이션
4최태수C최디비데이터베이스
5이길투C최디비데이터베이스
  • 삽입 이상

    • 원하지 않는 자료가 삽입되거나, 삽입하는데 자료가 부족하여 삽입이 되지 않아 발생하는 문제이다.

    • 위 테이블에서 네트워크 과목을 신설할 때 학생이 한명도 없으므로, 이름과 학번이 null값을 갖는다. 학번은 PK이므로 null을 가질 수 없으므로 오류가 발생한다.

  • 삭제 이상

    • 하나의 자료만 삭제하고 싶지만, 그 자료가 포함된 튜플 전체가 삭제됨으로 원하지 않는 정보 손실이 발생하는 문제점을 말한다.

    • 위 테이블에서는 "홍길동" 튜플을 삭제하면, (클래스 A, 신다람쥐, 넥슨 취직대비)가 삭제된다. 위에서 클래스 A 정보를 가진 튜플은 "홍길동"이 유일하므로 없어지면 안되는 A 클래스의 정보가 사라지게된다.

  • 수정(갱신) 이상

    • 정확하지 않거나 일부의 튜플만 갱신되어 정보가 모호해지거나 일관성이 없어져 정확한 정보 파악이 되지 않는다.

    • 위 테이블에서 B클래스의 강사 이름을 "웹마스터"로 바꾸게 되면, 모든 튜플에서 B클래스의 강사 이름을 전부 수정해야한다.

정규화 과정

실무에서는 주로 1~3정규형만을 사용한다고 한다. 그러므로 3정규형까지만 정리해보겠다.

  • 제 1 정규형

    • 애트리뷰트의 도메인이 오직 원자값만을 포함하고, 튜플의 모든 애트리뷰트가 도메인에 속하는 하나의 값을 가져야 한다.

    • 복합 애트리뷰트, 다중값 애트리뷰트, 중첩 릴레이션 등 비 원자적인 애트리뷰트들을 허용하지 않는 릴레이션 형태이다.

  • 제 2 정규형

    • 모든 비주요 애트리뷰트들이 주요 애트리뷰트에 대해서 완전 함수적 종속이면 제 2 정규형을 만족한다고 볼 수 있다. 완전 함수적 종속이란 X->Y 라고 가정했을 때, X의 어떠한 애트리뷰트라도 제거하면 더 이상 함수적 종속성이 성립하지 않는 경우를 말한다. 즉, 키가 아닌 열들이 각각 후보키에 대해 결정되는 릴레이션 형태를 말한다.

  • 제 3 정규형

    • 어떠한 비주요 애트리뷰트도 기본키에 대해서 이행적으로 종속되지 않으면 제 3 정규형을 만족한다고 볼 수 있다. 이행 함수적 종속이란 X->Y, Y->Z의 경우에 의해서 추론될 수 있는 X->Y의 종속관계를 말한다. 즉, 비주요 애트리뷰트가 비주요 애트리뷰트에 의해 종속되는 경우가 없는 릴레이션 형태를 말한다.(한 테이블에서 X->Y->Z이면, X->Y, Y->Z 두 테이블로 나눈다.)

정규화의 단점?

무작정 정규화를 하는 것은 좋지 않다. 테이블 간의 조인을 자주해야한다면 오히려 한 테이블에 있는 것이 퍼포먼스가 좋을 수도 있다는 이야기이다.


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

트랜잭션  (0) 2017.11.19
조인  (0) 2017.06.10
[SQL] select문  (0) 2017.06.08
테이블 수정 및 삭제  (0) 2017.06.08
varchar와 char의 차이  (0) 2017.06.07

데이터베이스 트랜잭션

트랜잭션이란?

데이터베이스 내에서 한번에 수행되어야할 일련의 연산.

한번에 완료되면 성공적이므로 COMMIT하고 데이터베이스에 반영됨.

도중에 취소가 되면 ROLLBACK하여 작업 시작의 초기의 상태로 되돌림.(일련의 연산 안의 모든 작업이 취소되어 데이터베이스에 영향을 미치지 않음)

트랙잭션의 특성

  • 원자성(Atomicity)

    분리 할수 없는 하나의 단위로 작업은 모두 완료되거나 모두 취소 되어야 합니다.

  • 일관성(Consistency)

    사용되는 모든 데이터는 일관되어야 합니다.

  • 격리성(Isolation)

    접근하고 있는 데이터는 다른 트랜잭션으로 부터 격리 되어야 합니다.

    트랜잭션이 진행되기전과 완료된 후에 상태를 볼수 있지만 트랜잭션이 진행되는 중간 데이터는 볼수 없습니다.

  • 영속성(Durability)

    트랙잭션이 정상 종료되면 그 결과는 시스템에 영구적으로 적용되어야 합니다.

  • 순차성(Sequentiality)

    데이터를 다시 로드하고 트랜잭션을 재생하여 원래 트랜잭션이 수행된 후의 상태로 데이터를 되돌리는 것을 말합니다.


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

정규화가 무엇일까?  (0) 2017.11.19
조인  (0) 2017.06.10
[SQL] select문  (0) 2017.06.08
테이블 수정 및 삭제  (0) 2017.06.08
varchar와 char의 차이  (0) 2017.06.07

+ Recent posts