CS Study : RDBMS의 정규화에 대해 설명해주세요

song yuheon·2023년 10월 23일
0

CS Study

목록 보기
28/50

정규화

  • 목적
    데이터 일관성, 정확성 유지. 입력/업데이트/삭제 오류 및 복잡성 감소하는 것이다.

데이터 중복 최소화하고 데이터 무결성 향상하는 것이다.
중복된 정보를 줄여서 데이터를 깔끔하게 정리하여 정보를 찾거나 바꿀 때 실수할 확률을 낮추는 것이다.

제1정규형(1NF) : 원자값 사용한다.

모든 칸에는 하나의 정보만 넣어야한다. 예를 들어 이름 칸에는 이름만, 나이 칸에는 나이만 넣는 거이다.

  • 규칙
    모든 컬럼에 단일 값만 저장.

제2정규형 (2NF) : 부분 함수 종속성 제거한다.

제2정규형(2NF)은 데이터베이스에서 부분 함수 종속성을 제거해 데이터 중복을 최소화하고 효율적인 데이터 관리를 돕는 정규화 방법이다.
예를 들어, '학생ID', '과목', '성적', '교사' 속성을 가진 테이블에서 '학생ID'와 '과목'을 복합키로 하고, '교사' 정보가 '과목'에만 종속되어 있다면 이를 두 개의 테이블로 분리하여 '교사' 정보의 중복을 줄이고 관리를 용이하게 한다.

  • 조건
    1NF 만족해야한다.
  • 규칙
    복합키 전체에 종속된 비키 속성만 사용한다.

제3정규형 (3NF) : 이행 함수 종속성 제거한다.

제3정규형 (3NF)은 데이터베이스 설계에서 중복과 종속성 문제를 해결한다.
학생 정보 관리를 예로 들면 학생 이름, 반, 담임 선생님 정보가 저장되어 있고 반에 속한 학생이 여러 명이면 담임 선생님 정보가 중복되어 저장된다.
제3정규형을 적용하여 학생 정보와 반 정보를 분리 저장함으로써 담임 선생님이 바뀔 경우 한 곳만 수정하면 되어 데이터 관리가 효율적이고 일관성 있게 이루어지게 된다.
즉 A -> B -> C 관계를 A -> B, B -> C로 바꾸는 것이다.

  • 조건
    2NF 만족해야한다.
  • 규칙
    키가 아닌 속성이 다른 키가 아닌 속성에 종속되지 않도록 한다.

BCNF (Boyce-Codd Normal Form) : 모든 결정자가 후보키이여야한다.

BCNF는 제3정규형을 좀 더 강화한 버전으로, 함수 종속성을 더 엄격하게 다룹니다.
이 정규형은 모든 결정자가 후보 키 집합에 속하도록 함으로써, 함수 종속성으로 인한 중복을 최소화합니다.
예를 들어, 학생ID, 과목ID, 강의실 정보를 포함하는 테이블이 있다고 가정한다.
함수 종속성: {학생ID, 과목ID} -> 강의실
후보키: {학생ID, 과목ID}
이 테이블은 제3정규형을 만족하지만 BCNF를 만족하지 않는다.
이는 강의실 정보가 과목ID에만 종속되어 있어서 발생하는 문제로 데이터 중복과 무결성 문제를 야기할 수 있다.
BCNF를 만족시키기 위해서는 테이블을 CourseClassroomStudentCourse 두 개로 분리하여야 한다.
그러면 강의실 정보의 중복을 제거하고 과목ID에 따른 강의실 정보를 효과적으로 관리할 수 있게 된다.

  • 조건
    3NF 만족해야 한다.
  • 규칙
    모든 결정자가 후보키가 되도록 한다.

제4정규형 (4NF) : 다치 종속성 제거한다.

제4정규형(4NF)은 데이터베이스 내에서 다치 종속을 제거함으로써 데이터 중복을 최소화하고 무결성을 향상시키기 위한 정규형이다.
다치 종속이란 한 속성이 다른 두 속성에 독립적으로 종속되어 있는 경우를 말한다.

예를 들어 학생의 취미와 언어 구사 능력을 한 테이블이 있다고 가정하자
한 학생이 여러 취미와 여러 언어를 구사할 경우 이 정보들이 중복되어 저장된다.
제4정규형을 적용해 학생-취미 관계와 학생-언어 관계를 별도의 테이블로 분리하면 데이터 중복을 줄이고 정보 관리가 편리해진다.
이는 데이터 무결성 향상에도 기여한다.

  • 조건
    3NF 또는 BCNF 만족해야한다.
  • 규칙
    모든 다치 종속성 제거한다.

제5정규형 (5NF)** 조인 종속성 제거한다.

제5정규형(5NF)은 데이터베이스에서 데이터의 중복을 최소화하고 무결성을 유지하기 위해 사용되는 정규화의 한 단계이다.
이 정규형은 조인 종속성을 기반으로 하며 한 테이블을 여러 개의 테이블로 분해하여 데이터 중복을 제거하고 데이터 관리의 효율성을 높인다.

예를 들어 고객, 제품, 공급업체 정보를 포함하는 테이블이 있다고 가정한다면 각 고객은 여러 제품을 구매하고 각 제품은 특정 공급업체에 의해 공급된다.
또한 고객은 특정 공급업체와 거래한다.
이 모든 정보를 하나의 테이블에 저장하면 데이터 중복과 무결성 문제가 발생할 수 있다.
제5정규형을 적용해 테이블을 세 개로 분해하면, 데이터 중복이 감소하고 각 정보를 독립적으로 관리할 수 있어 데이터 무결성과 관리 효율성이 향상된다.

  • 조건
    4NF 만족해야한다.
  • 규칙
    모든 조인 종속성 제거한다.
profile
backend_Devloper

0개의 댓글