데이터베이스 설계에서 "이상"은 데이터의 무결성을 해치고, 비효율성을 초래하는 비정상적인 데이터 현상을 의미한다. 이는 주로 데이터 중복과 비정규화된 테이블 구조에서 발생하며, 삽입 이상, 갱신 이상, 삭제 이상으로 나눌 수 있다. 이 글에서는 각 이상 현상의 개념과 이를 방지하기 위한 정규화 과정을 설명한다.
삽입 이상은 새로운 데이터를 삽입할 때 불필요한 데이터를 함께 삽입해야 하거나, 특정 필드가 채워지지 않으면 데이터를 삽입할 수 없는 상황을 말한다.
예를 들어, Employees
와 Departments
정보를 함께 저장하는 테이블이 있다고 가정해보자.
CREATE TABLE EmployeeDepartment (
EmployeeID INT PRIMARY KEY,
EmployeeName VARCHAR(50),
DepartmentID INT,
DepartmentName VARCHAR(50)
);
새로운 부서를 추가하려면 최소한 하나의 직원 정보를 함께 삽입해야 한다.
INSERT INTO EmployeeDepartment (EmployeeID, EmployeeName, DepartmentID, DepartmentName)
VALUES (NULL, NULL, 101, 'Research');
이 경우, EmployeeID
와 EmployeeName
이 NULL일 수 없기 때문에 삽입이 불가능하다.
갱신 이상은 데이터의 중복으로 인해 일부 데이터를 갱신할 때 모든 중복된 데이터를 일관되게 갱신하지 않으면 발생하는 문제를 말한다.
앞서 사용한 EmployeeDepartment
테이블에서 부서 이름을 변경하려면 해당 부서에 속한 모든 직원의 DepartmentName
필드를 일관되게 갱신해야 한다.
UPDATE EmployeeDepartment
SET DepartmentName = 'R&D'
WHERE DepartmentID = 101;
만약 일부 행에서만 DepartmentName
을 변경하면 데이터 불일치가 발생한다.
UPDATE EmployeeDepartment
SET DepartmentName = 'R&D'
WHERE EmployeeID = 1;
삭제 이상은 데이터를 삭제할 때 의도하지 않은 다른 중요한 데이터도 함께 삭제되는 문제를 말한다.
EmployeeDepartment
테이블에서 한 명의 직원 정보를 삭제할 때, 그 직원이 마지막으로 남은 특정 부서의 유일한 직원인 경우, 그 부서의 정보도 함께 삭제된다.
DELETE FROM EmployeeDepartment
WHERE EmployeeID = 1;
이 경우, DepartmentID = 101
인 부서의 정보도 함께 삭제된다.
정의
모든 속성이 원자값을 가져야 하며, 각 열이 하나의 값만을 가져야 한다. 중첩된 테이블이나 반복되는 그룹이 없어야 한다.
예제
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
EmployeeName VARCHAR(50)
);
CREATE TABLE Departments (
DepartmentID INT PRIMARY KEY,
DepartmentName VARCHAR(50)
);
정의
1NF를 만족하고, 부분 종속성을 제거하여 기본키의 모든 부분집합에 종속적인 속성을 제거한다. 기본키가 단일 속성인 경우 2NF는 자동으로 만족된다.
예제
CREATE TABLE EmployeeDepartments (
EmployeeID INT,
DepartmentID INT,
PRIMARY KEY (EmployeeID, DepartmentID),
FOREIGN KEY (EmployeeID) REFERENCES Employees(EmployeeID),
FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID)
);
정의
2NF를 만족하고, 이행 종속성을 제거하여 기본키가 아닌 모든 속성이 기본키에만 의존하게 한다.
예제
-- 이미 3NF를 만족하는 설계
데이터베이스 설계에서 삽입 이상, 갱신 이상, 삭제 이상은 중복된 데이터와 비정규화된 테이블 구조로 인해 발생하는 문제이다. 이러한 문제를 방지하기 위해 정규화가 필요하다. 정규화된 데이터베이스는 데이터 무결성을 보장하고, 이상 현상을 최소화하여 효율적인 데이터 관리를 가능하게 한다. 정규화 과정을 통해 데이터베이스 설계의 기본 원칙을 준수하여 데이터의 일관성과 무결성을 유지할 수 있다.