Posts [Database] 정규화(Normalization)
Post
Cancel

[Database] 정규화(Normalization)

정규화(Normalization)

데이터베이스에서 정규화의 정의, 목적, 장점 및 단점, 대상, 과정에 대해 알아보고 함수적 종속의 의미에 대해 알아보자🥴

데이터베이스 정규화란?

데이터의 중복을 줄이고 무결성을 향상시키는 등 여러 목적을 달성하기 위해서 재디자인하는 것이다.

  • 속성들끼리의 종속 관계를 분석하여 여러개의 릴레이션으로 분해하는 과정 → 데이터베이스의 설계를 재구성하는 테크닉
  • 일반적으로 테이블을 여러개로 분해하면 속도는 상대적으로 느려질 수 있지만, 분해하지 않으면 이상 문제들이 발생한다.

즉, 정규화는 릴레이션 내에서 중복을 제거하는 과정이다.

데이터베이스 정규화의 목적

  1. 불필요한 데이터(data redundancy)를 제거, 데이터의 중복을 최소화하기 위해서 (저장 공간 최소화)
  2. 각종 이상 현상(Anomaly) 을 방지하기 위해서, 테이블의 구성을 논리적이고 직관적으로 한다.
    • 이상현상

    [Database] 데이터베이스의 이상현상

  3. 데이터 테이블 구성이 논리적, 직관적으로 하기 위해서 (자료 구조의 안정성 최대화)
  4. 다양한 관점에서의 query를 지원하기 위해서 (효과적인 검색 알고리즘)
  5. 무결성 제약조건의 시행을 간단하게 하기 위해서 (데이터 무결성 유지)

데이터베이스 정규화의 장점

  • 응용프로그램 단에서 불필요한 로직을 없앨 수 있다.
  • 올바른 데이터만 얻을 수 있다.(변칙 방지)
  • 불필요한 쿼리(예를들면, 서브 쿼리) 제거로 성능 향상

데이터베이스 정규화의 단점

  • 릴레이션의 분해로 인해 릴레이션 간의 연산(JOIN 연산)이 많아진다. (응답 시간이 느려질 수 있다.)

구체적으로 설명하자면, 정규화를 수행한다는 것은 데이터를 결정하는 결정자에 의해 함수적 종속을 가지고 있는 일반 속성을 의존자로 하여 입력/수정/삭제 이상을 제거하는 것이다. 데이터의 중복 속성을 제거하고 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약되므로 한 테이블의 데이터 용량이 최소화되는 효과가 있다. 따라서 정규화된 테이블은 데이터를 처리할 때 속도가 빨라질 수도 있고 느려질 수도 있는 특성이 있다.

데이터베이스 정규화의 대상

온라인 거래 시스템 같은 OLTP(OnLine Transaction Processing) 데이터베이스는 CRUD(Create, Read, Update, Delete) 가 많이 일어나기 때문에 정규화 되는것이 좋다.

  • 하지만, 분석 리포트 같은 OLAP(OnLine Analytical Processing) 데이터베이스는 분석과 리포팅을 위해 사용되기 때문에 연산의 속도를 위해 반정규화(denormalization)의 대상이 된다.
    • 반정규화(denormalization)란?

      정규화된 시스템을 성능 향상 및 개발과 운영의 단순화를 위해 역으로 정규화를 수행하는 것을 말한다. 일반적으로 join을 많이 사용해야 할 경우, 대량의 범위를 자주 처리하는 경우 등 조회에 대한 처리가 중요하다고 판단될 때 부분적으로 반정규화를 한다.

정규화의 과정

정규화는 1정규화 ~ 6정규화 까지 있지만, 실무에서는 대체로 1~3 정규화까지의 과정을 거친다.

  • 제 1정규화 : 각 컬럼들은 값이 원자값을 만족하는 것
  • 제 2정규화 : 테이블의 모든 컬럼에서 부분 함수적 종속을 제거하는 것
  • 제 3정규화 : 기본키를 제외한 속성들 간의 이행적 함수 종속을 없애는 것
  • 제 BCNF화 : 결정자이면서 후보키가 아닌 것들 제거
  • 제 4정규화 : 다치 종속 제거

각 정규화의 과정에 대해 더 자세히 알아보고 싶다면, 정규화 과정 링크를 참고하자.

함수적 종속성이란

함수적 종속성이란 애트리뷰트 데이터들의 의미와 애트리뷰트들 간의 상호 관계로부터 유도되는 제약조건의 일종이다. X 와 Y 를 임의의 애트리뷰트 집합이라고 할 때, X 의 값이 Y 의 값을 유일하게(unique) 결정한다면 “X 는 Y 를 함수적으로 결정한다”라고 한다. 함수적 종속성은 실세계에서 존재하는 애트리뷰트들 사이의 제약조건으로부터 유도된다. 또한 각종 추론 규칙에 따라서 애트리뷰트들간의 함수적 종속성을 판단할 수 있다. cf> 애트리뷰트들의 관계로부터 추론된 함수적 종속성들을 기반으로 추론 가능한 모든 함수적 종속성들의 집합을 폐포라고 한다.

예시를 보면서 쉽게 이해해보자,

Untitled

위의 릴레이션에서 Model 속성과 Manufacturer를 알면 Model Full Name 속성을 참조하지 않아도 값을 알 수 있다. 하지만 때문에 Model Full Name는 Model과 Manufacturer에 대해 완전 함수적 종속이다.

그리고, Manufaturer Country는 사실 Manufacture와만 종속관계에 있고 Model과는 아무런 연관이 없기 때문에 이를 부분 함수 종속 이라 한다.

This post is licensed under CC BY 4.0 by the author.

[OS] 뮤텍스와 세마포어 (Mutex and Semaphore)

[Database] 정규화(Normalization) 과정 (1NF, 2NF, 3NF, BCNF)

Loading comments from Disqus ...