정규화란?

임수정·2023년 8월 16일
0
post-thumbnail

정규화

데이터베이스 설계의 중요한 개념 중 하나로, 데이터의 일관성을 유지하고 최소한의 데이터 중복과 최대한의 데이터 유연성을 가지기 위해 데이터를 구조화하는 방법입니다.

정규화의 장,단점

장점

  1. 데이터 일관성 및 무결성 유지: 데이터베이스 내 데이터의 정확성과 신뢰성을 높일 수 있습니다.

  2. 데이터 중복 감소: 정규화를 통해 중복된 정보를 제거하거나 최소화함으로써 저장 공간을 절약할 수 있습니다.

  3. 변경 관리 용이성: 데이터 변경 시 정규화된 구조를 사용하면 변경이 필요한 데이터를 특정 테이블에서만 수행할 수 있으므로 유지보수와 변경 관리가 용이해집니다.

단점

  1. 조인 작업의 증가: 과도한 정규화는 조인 작업이 늘어나게 하며, 이로 인해 성능 저하가 발생할 수 있습니다.

  2. 복잡성 증가: 과도한 정규화는 데이터베이스의 구조를 복잡하게 만들 수 있습니다. 이로 인해 데이터 모델을 이해하고 관리하는 데 어려움을 겪을 수 있습니다.

  3. 불필요한 분해: 과도한 정규화는 데이터 모델을 지나치게 분해할 수 있어 실제 업무 요구를 반영하지 못할 수 있습니다.

따라서 정규화를 수행할 때에는 데이터베이스의 특성, 업무 요구사항, 성능 등을 종합적으로 고려하여 적절한 정규화 수준을 선택하는 것이 중요합니다.

제 1정규화(1NF)

제 1정규화는 데이터베이스 테이블 내의 각 컬럼이 하나의 값(원자 값,Atomic Value)을 가지도록 하는 작업을 의미합니다. 즉, 각 컬럼에는 더 분해할 수 없는 최소한의 데이터로 구성되어야합니다.

위의 테이블에서 조인성,한효주,류승룡이 여러 개의 취미를 가지고 있기 때문에 제1 정규형을 만족하지 못하고 있습니다. 이를 고치기 위해서는 아래와 같이 분해하면 됩니다.

제 2정규화(2NF)

제 2정규화는 제 1정규화를 이미 만족한 상태에서 진행되며 기본키가 아닌 속성이 기본키에 부분적 종속이 아닌 완전 함수 종속이도록 구성해야합니다.

완전 함수 종속

기본키 외 나머지 컬럼들로는 다른 컬럼의 값을 유일하게 결정하지 않는다 즉, 기본키가 아닌 나머지 컬럼들이 기본키 전체에 의존해야 하며, 어떤 하위 집합에도 종속되어서는 안 됩니다. 이렇게 함으로써 데이터의 일관성과 중복을 줄이는 데 기여합니다.

  1. 성적을 알기 위해서는 학생 번호+과목이 있어야 합니다. (ex : 1004번의 과학 성적 97)
  2. 특정 과목의 지도교수는 과목명만 알면 지도교수가 누군지 알 수 있습니다. (ex : 체육의 지도교수 김봉식)

위 테이블에서 기본키는 (학생 번호, 과목)으로 복합키이다.
그런데 이때 지도교수 칼럼은 (학생 번호, 과목)에 종속되지 않고 (과목) 에만 종속되는 부분적 종속이다.

따라서 제2 정규화를 만족하지 않으므로 아래와 같이 분해해야합니다.

제 3정규화(3NF)

제 1정규화와 제 2정규화를 이미 만족한 상태에서 진행되며, 테이블 내에서 이행적 종속성(Transitive Dependency)을 제거하여 데이터 중복을 최소화하는 과정을 의미합니다.

이행적 종속성

A -> B, B -> C가 성립할 때 A -> C가 성립되는 것을 의미한다.

위와 같은 테이블이 있다고 가정해보겠습니다.
학생번호를 알면 과목을 알 수 있습니다. 과목을 알면 수강료를 알 수 있습니다. 따라서 학생번호를 알면 수강료를 알 수 있습니다.

이행적 종속을 제거하는 이유는 비교적 간단합니다.
예를 들어, 1002번 학생이 수강하는 강좌가 과학으로 변경되었다고 가정해보겠습니다. 이행적 종속이 존재한다면 1002번의 학생은 과학수업을 55,000원이라는 수강료로 듣게 됩니다. 물론 과목 이름에 맞게 수강료를 다시 변경할 수 있지만, 이러한 번거로움을 해결하기 위해 제3 정규화를 진행하는 것입니다.

위와 같이 제 3정규화를 진행해야합니다.

profile
부족함을 인정하고 채워나가는 개발자! (Node.js 개발자)

0개의 댓글