[sql] 테이블 정규화 및 비정규화
목차
정규화
정규화는 데이터베이스 설계 과정에서 중복을 최소화하고 데이터를 구조화하는 프로세스입니다. 이를 통해 데이터베이스가 효율적으로 운영될 수 있고, 일관된 데이터를 유지할 수 있습니다.
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)
);
비정규화된 데이터베이스는 일반적으로 조회 작업의 성능을 향상시키지만, 데이터의 중복성과 이상을 유발할 수 있습니다.
이상적으로, 데이터베이스 설계는 정규화된 상태로 유지되어야 하지만, 실제 업무 환경에서는 비정규화된 데이터베이스가 더 적합한 경우도 있습니다.
참고 자료
- Date, C. J. (2003). An Introduction to Database Systems (8th ed.). Addison Wesley.