[SQLP]정규화(Normalization) (1NF - 3NF)

·2025년 1월 7일

SQLP

목록 보기
4/20

🤷‍♂️정규화란?

데이터베이스 설계에서 중복을 최소화하고 무결성을 유지하기 위해 데이터를 분리하고 구조를 최적화하는 과정

*무결성? 데이터가 정확하고, 일관되며, 신뢰할 수 있도록 보장하는 규칙
-정확성 (Accuracy): 데이터는 실제 사실을 정확하게 반영해야 함.
예시: "학생 테이블"에서 나이(age)가 음수 값으로 저장되지 않도록 하는 규칙.
-일관성 (Consistency): 데이터는 모든 규칙과 제약조건을 충족해야 함.
예시: "주문 테이블"에서 고객이 존재하지 않는 ID로 주문을 입력할 수 없도록 하는 규칙.
-신뢰성 (Reliability): 데이터가 중복되거나 손상되지 않도록 하여 신뢰할 수 있는 상태로 유지
예시: "사원 테이블"에서 동일한 사원이 여러 번 중복 저장되지 않도록 하는 규칙

😺1차 정규화

1차 정규화는 데이터베이스의 터이블을 정리하여 각 컬럼에 대해 원자값만 포함하도록 하는 규칙으로 반복되는 그룹이나 여러 값을 한 컬럼에 넣는 문제를 해결.

  • 1NF 주요 규칙
    1) 각컬럼은 원자값만을 가진다.
    2) 중복된 행이 없어져야 한다.
    3) 각 컬럼에 저장된 값은 반드시 단일 값이어야 한다.


수업 컬럼에 여러개의 과목이 컬럼으로 들어가 있어 1차 정규화를 진행해야한다.

각 과목별로 행을 분리해 원자값만 들어가도록 함으로써 1차 정규화를 만족하게 된다.

😺2차 정규화

2차 정규화는 1차 정규화를 만족한 상태에서 부분 종속을 해결하는 것이다.
부분종속이란 기본 키(PK)의 일부 속성에 의존하는 속성이 있을 때 발생하는 상황이다.

위 테이블의 기본 키는(학생ID,과목)이다.
교수명,교수연락처는 과목에 의존하고 있다.
PK인 학생ID에는 의존하고 있지 않기 때문에 2NF로 변환해야한다.

[2NF 적용후]

그럼 과목은 PK인 학생ID에만 의존하고 교수명,교수연락처는 PK인 과목에만 의존하므로 2NF를 만족한다.

😺3차 정규화

3차 정규화는 2차 정규화를 만족한 상태에서 이행적 종속을 해결하는 것이다.
이행적 종속이란 속성 A가 B에, B가 C에 종속되면 A가 C에 이행적으로 종속되는 상황이다.
2차 정규화했던 테이블에서 교수연락처는 교수명에 의존하고,교수명은 과목에 의존하므로 교수연락처는 과목에 의존하는 것이다. (=PK가 아닌 컬럼에 의존할 때 3NF를 수행)

[3NF 적용후]

  • 교수연락처는 교수명에만 의존하므로 교수연락처 테이블을 별도로 분리했으므로 이행적 종속을 제거하여 3NF를 만족시켰다.
profile
냐홍

0개의 댓글