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 |