CS 공부/DB

[DB] 1~3정규화

양쏘쏘 2024. 7. 11. 16:47
728x90
반응형

정규화 과정 설명

제1정규형 (1NF)

  • 정의: 테이블의 모든 필드가 원자값(Atomic Value)을 가져야 한다.
  • 조건:
    • 각 컬럼에는 하나의 값만 저장해야 한다.
    • 각 레코드는 고유해야 한다.
    • 중복되는 그룹(반복 그룹)이 없어야 한다.
  • 예시:
-- 1NF 위반 예시
CREATE TABLE Orders (
    OrderID INT,
    CustomerID INT,
    ProductIDs VARCHAR(100) -- '1,2,3' 같은 방식으로 여러 값을 저장
);

-- 1NF 만족 예시
CREATE TABLE Orders (
    OrderID INT,
    CustomerID INT,
    ProductID INT -- 한 컬럼에 한 값만 저장
);

제2정규형 (2NF)

  • 정의: 제1정규형을 만족하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수적 종속성을 가져야 한다.
  • 조건:
    • 테이블이 제1정규형을 만족해야 한다.
    • 기본키의 부분 집합이 아닌 모든 속성이 기본키 전체에 완전 종속되어야 합니다.

완전 함수적 종속성:

  • 정의: 속성이 기본키의 전체에 종속될 때 완전 함수적 종속성이라고 합니다.
  • 예시: OrderID, ProductID -> Quantity에서 Quantity는 OrderID와 ProductID의 조합 전체에 종속됩니다.

부분 함수적 종속성:

  • 정의: 속성이 기본키의 일부에 종속될 때 부분 함수적 종속성이라고 합니다.
  • 예시: OrderID, CustomerID -> CustomerName에서 CustomerName은 CustomerID에 부분적으로 종속됩니다. 이는 2NF 위반입니다.
-- 2NF 위반 예시
CREATE TABLE Orders (
    OrderID INT,
    CustomerID INT,
    ProductID INT,
    CustomerName VARCHAR(50) -- CustomerID에 종속
);

-- 2NF 만족 예시
CREATE TABLE Orders (
    OrderID INT,
    ProductID INT
);

CREATE TABLE Customers (
    CustomerID INT,
    CustomerName VARCHAR(50)
);

제3정규형 (3NF)

  • 정의: 제2정규형을 만족하고, 기본키가 아닌 모든 속성이 기본키에 이행적 종속성을 가지지 않아야 한다.
  • 조건:
    • 테이블이 제2정규형을 만족해야 한다.
    • 기본키에 직접 종속되지 않은 컬럼이 없어야 한다.

이행적 종속성:

  • 정의: A -> B이고 B -> C이면 A -> C가 되는 관계를 이행적 종속성이라고 합니다.
    • OrderID -> ProductID (OrderID가 ProductID를 결정)
    • ProductID -> ProductName (ProductID가 ProductName을 결정)
    • 따라서 OrderID -> ProductName (이행적 종속성)
-- 3NF 위반 예시
CREATE TABLE Orders (
    OrderID INT,
    CustomerID INT,
    ProductID INT,
    ProductName VARCHAR(50) -- ProductID에 종속
);

-- 3NF 만족 예시
CREATE TABLE Orders (
    OrderID INT,
    CustomerID INT,
    ProductID INT
);

CREATE TABLE Products (
    ProductID INT,
    ProductName VARCHAR(50)
);

제3정규형에서는 기본키가 아닌 모든 속성이 기본키에 직접적으로 종속되어야 하며, 다른 속성에 종속되지 않아야 합니다. 이를 통해 데이터 중복을 최소화하고 데이터 무결성을 유지할 수 있습니다.

728x90

'CS 공부 > DB' 카테고리의 다른 글

[DB] 오라클 자주 쓰는 내장함수 모음(코테 대비)  (0) 2024.10.21
[DB] 트랜잭션(ACID와 격리수준)  (1) 2024.07.22
[DB] 데이터 무결성  (0) 2024.07.11
[DB] 제 2정규화  (0) 2024.07.10
[DB] 제 1 정규화  (0) 2024.05.24