본문 바로가기
재밌는 이야기/둘러보기

데이터 정규화란 무엇인가

by Jevestor 2023. 12. 29.
728x90

데이터 정규화에 대해 설명드리겠습니다. 데이터 정규화는 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스입니다. 정규화의 주된 목적은 데이터 중복을 제거하고, 효율성을 향상시키며, 데이터 무결성을 보장하기 위함입니다​​​​.

 

    • 제1 정규화 (1NF)
      • 규칙: 각 컬럼이 하나의 속성만을 가져야 하며, 같은 종류나 타입의 값을 가져야 합니다. 각 컬럼은 유일한 이름을 가져야 하고, 칼럼의 순서가 상관없어야 합니다​​.
      • 목적: 데이터베이스의 각 컬럼에 원자 값(하나의 값)을 가지도록 하여, 다중 값을 갖지 않게 하는 것입니다.
  • 제2 정규화 (2NF)
    • 규칙: 1NF를 만족해야 하며, 모든 컬럼이 *부분적 종속이 없어야 합니다. 즉, 모든 칼럼이 완전 함수 종속을 만족해야 합니다​​.
    • 목적: 제1 정규화를 완료한 테이블에서, 부분 함수 종속성을 제거하는 것입니다. 이를 통해 모든 *기본 키의 부분집합에 의존하는 컬럼들을 분리하여 새로운 테이블을 만들고 그 사이의 관계를 설정합니다.
부분적 종속

데이터베이스에서 하나의 테이블에 속한 속성(컬럼)이 그 테이블의 기본키가 아닌 일부분에만 종속되는 현상을 말합니다. 간단히 말해, *복합 키(여러 속성으로 구성된 키)를 가진 테이블에서 일부 속성이 이 복합 키의 전체가 아닌 일부에만 의존하는 경우를 지칭합니다.

예를 들어, 학생 ID와 강의 ID가 복합 키를 이루는 테이블이 있고, 학생 이름이라는 속성이 포함되어 있다면, 학생 이름은 학생 ID에만 종속되고, 강의 ID에는 종속되지 않습니다. 이러한 상황에서 학생 이름은 학생 ID 대해 부분적 종속을 나타냅니다.

제2 정규화(2NF)의 목적은 바로 이러한 부분적 종속을 제거하여, 각 속성이 테이블의 전체 기본키에만 종속되도록 하는 것입니다. 이를 통해 데이터 중복과 업데이트 시 발생할 수 있는 문제를 줄일 수 있습니다.
기본키 (Primary Key)

테이블에서 각 행을 고유하게 식별하는 데 사용되는 컬럼(또는 컬럼의 집합)입니다.
모든 값은 고유해야 하며, 기본키로 지정된 필드는 null 값을 가질 수 없습니다.

※ 테이블: 학생 정보
※  컬럼: 학생 ID, 이름, 학년, 전공
※  기본키: 학생 ID

여기서 '학생 ID'는 각 학생을 고유하게 식별할 수 있는 유일한 값입니다.
모든 학생의 ID는 다르므로 이 필드는 기본키로 적합합니다.
복합키 (Composite Key)

두 개 이상의 컬럼을 결합하여 테이블 내의 각 행을 고유하게 식별하는 키입니다.
단일 컬럼으로는 각 행을 고유하게 식별할 수 없을 때 사용됩니다. 각 컬럼의 조합이 고유해야 하며, 이들 중 어떤 컬럼도 null 값을 가질 수 없습니다.

  테이블: 학생 수강 정보
  컬럼: 학생 ID, 강의 ID, 성적
  복합키: 학생 ID + 강의 ID

이 경우, '학생 ID'만으로는 수강 정보를 고유하게 식별할 수 없습니다.
같은 학생이 여러 강의를 수강할 수 있기 때문입니다.
따라서 '학생 ID'와 '강의 ID'를 조합한 복합키가 각 수강 정보를 고유하게 식별하는 데 사용됩니다.

기본키는 테이블에서 각 행의 고유성을 보장하는 반면, 복합키는 여러 컬럼이 결합하여 이 고유성을 보장합니다. 이 두 키는 데이터베이스의 무결성과 조직을 유지하는 데 매우 중요합니다.

 

  • 제3 정규화 (3NF)
    • 규칙: 2NF를 만족해야 하며, *기본키를 제외한 속성들 간의 이행 종속성이 없어야 합니다​​.
    • 목적: 제2 정규화를 완료한 테이블에서, *이행적 함수 종속성을 제거하는 것입니다. 이행적 함수 종속이란 A -> B 종속, B -> C 종속, A -> C 종속인 관계를 말합니다
이행적 함수 종속성

데이터베이스 정규화에서 사용되는 개념으로, 한 속성이 다른 속성에 간접적으로 종속되는 현상을 말합니다. 즉, A, B, C가 속성이라고 할 때, A가 B에 함수적으로 종속되고, B가 C에 함수적으로 종속될 때, A가 C에 이행적으로 종속되는 것입니다.

예를 들어, '학생 ID'가 '학생 이름'에 종속되고, '학생 이름'이 '학생 주소'에 종속되는 경우, '학생 ID'는 이행적으로 '학생 주소'에 종속됩니다.

제3 정규화 (3NF)의 목적은 이러한 이행적 함수 종속성을 제거하여 데이터 중복과 불필요한 종속성을 줄이는 것입니다. 이를 통해 데이터의 무결성과 효율성을 향상시킬 수 있습니다.

 

  • BCNF (Boyce-Codd Normal Form)
    • 규칙: 3NF를 만족해야 하며, 모든 *결정자가 후보키 집합에 속해야 합니다​​.
    • 목적: BCNF는 제 3정규형을 좀 더 강화한 버전으로, 보다 엄격한 데이터 무결성을 보장합니다.
결정자

데이터베이스에서의 중요한 개념입니다. 한 테이블 내에서 특정 컬럼의 값이 다른 컬럼(들)의 값에 영향을 미칠 때, 이 영향을 미치는 컬럼을 '결정자'라고 합니다. 다시 말해, 한 컬럼(결정자)의 값이 결정되면, 이로 인해 다른 컬럼(들)의 값도 결정되는 관계를 가지고 있습니다.

예를 들어, '학생 ID' 컬럼이 '학생 이름', '학년' 등의 다른 컬럼의 값을 결정한다면, '학생 ID'는 이러한 컬럼들에 대한 결정자입니다. 데이터베이스 정규화에서는 이러한 결정자를 기준으로 테이블을 재구성하여 데이터 중복을 줄이고 무결성을 향상시키는 데 사용됩니다.

 

 

정규화의 장점으로는 데이터베이스 변경 시 이상 현상(Anomaly)을 제거할 수 있으며, 새로운 데이터 형의 추가로 인한 확장 시 구조를 변경하지 않아도 되거나 일부만 변경해도 됩니다. 또한, 데이터베이스와 연동된 응용 프로그램에 최소한의 영향만을 미치게 되어 응용프로그램의 생명을 연장시킵니다.

728x90

댓글