[sql] 테이블 정규화 및 비정규화

목차

  1. 정규화
  2. 비정규화

정규화

정규화는 데이터베이스 설계 과정에서 중복을 최소화하고 데이터를 구조화하는 프로세스입니다. 이를 통해 데이터베이스가 효율적으로 운영될 수 있고, 일관된 데이터를 유지할 수 있습니다.

1NF (First Normal Form)

데이터베이스 테이블이 1NF에 있다는 것은 각 열이 원자 값만을 가지고 있으며, 중복된 열이 없다는 것을 의미합니다.

예시:

ID | Name    | Skills
1  | Alice   | SQL, Python
2  | Bob     | Java, Python

2NF (Second Normal Form)

데이터베이스 테이블이 2NF에 있다는 것은 모든 비주요 속성이 기본키에 대해 완전 함수적 종속을 보장한다는 것을 의미합니다.

예시:

EmployeeID | EmployeeName | ProjectID | ProjectName
1          | Alice        | 101       | ProjectA
2          | Bob          | 102       | ProjectB

3NF (Third Normal Form)

데이터베이스 테이블이 3NF에 있다는 것은 모든 비주요 속성이 다른 비주요 속성에 의존하지 않는다는 것을 의미합니다.

예시:

EmployeeID | EmployeeName | ProjectID | EmployeeDept | DeptLocation
1          | Alice        | 101       | HR           | New York
2          | Bob          | 102       | IT           | Seattle

비정규화

비정규화는 데이터베이스 설계 과정에서 성능을 향상시키거나 데이터를 조회할 때의 복잡성을 줄이기 위해 정규화된 테이블을 통합하는 프로세스입니다.

예시:

CREATE TABLE Employee (
  EmpID INT,
  EmpName VARCHAR(50),
  DeptID INT,
  DeptName VARCHAR(50)
);
CREATE TABLE Department (
  DeptID INT,
  DeptName VARCHAR(50),
  Location VARCHAR(50)
);

위의 Employee 테이블과 Department 테이블을 비정규화하면 다음과 같습니다:

CREATE TABLE Employee (
  EmpID INT,
  EmpName VARCHAR(50),
  DeptID INT,
  DeptName VARCHAR(50),
  Location VARCHAR(50)
);

비정규화된 데이터베이스는 일반적으로 조회 작업의 성능을 향상시키지만, 데이터의 중복성과 이상을 유발할 수 있습니다.


이상적으로, 데이터베이스 설계는 정규화된 상태로 유지되어야 하지만, 실제 업무 환경에서는 비정규화된 데이터베이스가 더 적합한 경우도 있습니다.

참고 자료