Database

DB의 데이터 무결성(Integrity)과 제약 조건(Constraints)

Somaz 2025. 10. 8. 08:07
728x90
반응형

Overview

오늘은 데이터베이스에서 데이터 무결성(Integrity)제약 조건(Constraints)에 대해 알아보려고 한다.

 

데이터 무결성이란 데이터의 정확성, 일관성, 신뢰성을 유지하는 것을 의미한다. 데이터베이스는 여러 사용자가 동시에 접근하고 변경할 수 있기 때문에 무결성을 보장하는 것이 매우 중요하다.

 

이를 위해 Primary Key, Foreign Key, Unique, Not Null, Check Constraints 등의 제약 조건을 활용하여 데이터가 올바르게 저장되도록 관리한다.

 

이번 글에서는 데이터 무결성의 개념과 이를 유지하기 위한 제약 조건들에 대해 자세히 살펴보겠다.

 

 

 

 

 


 

 

 

1. 데이터 무결성(Integrity)이란?

데이터 무결성(Data Integrity)은 데이터가 정확하고 신뢰할 수 있도록 보장하는 데이터베이스의 핵심 원칙이다.

 

 

 

데이터 무결성이 필요한 이유

  • 데이터가 손상되거나 중복되지 않도록 방지
  • 데이터의 일관성을 유지하여 신뢰할 수 있는 정보 제공
  • 비즈니스 논리를 보장하고 오류를 최소화

 

 

 

데이터 무결성 유형

데이터 무결성은 크게 개체 무결성(Entity Integrity), 참조 무결성(Referential Integrity), 도메인 무결성(Domain Integrity)으로 나눌 수 있다.

 

무결성 유형 설명 예시
개체 무결성 (Entity Integrity) 각 행(Row)을 고유하게 식별하도록 보장 Primary Key 사용
참조 무결성 (Referential Integrity) 외래 키(Foreign Key)가 올바른 관계를 유지하도록 보장 Foreign Key 사용
도메인 무결성 (Domain Integrity) 데이터가 허용된 값 범위를 벗어나지 않도록 보장 Check, Not Null, Unique Constraints 사용

 

 

 

 


 

 

 

 

2. 데이터 무결성을 위한 제약 조건(Constraints)

데이터 무결성을 유지하기 위해 데이터베이스는 다양한 제약 조건(Constraints)을 제공한다. 다음은 가장 중요한 제약 조건들이다.

 

 

1️⃣ PRIMARY KEY (기본 키)

  • 테이블에서 각 행을 고유하게 식별하는 컬럼
  • NULL 값을 허용하지 않음
  • 테이블당 하나만 존재할 수 있음

 

예제

CREATE TABLE Employees (
    emp_id INT PRIMARY KEY,  -- 기본 키
    name VARCHAR(50) NOT NULL,
    department VARCHAR(50)
);

 

 

 

삽입 시 오류 발생 예제

INSERT INTO Employees (emp_id, name, department) VALUES (1, 'John Doe', 'HR');
INSERT INTO Employees (emp_id, name, department) VALUES (1, 'Jane Doe', 'Finance');
-- 오류 발생: emp_id가 중복되었기 때문에 삽입 불가

 

 

 

 

 

2️⃣ FOREIGN KEY (외래 키)

  • 다른 테이블의 기본 키(Primary Key)를 참조하는 컬럼
  • 부모 테이블의 값만 입력 가능
  • 참조하는 값이 삭제되면 연쇄적으로 변경(CASCADE) 가능

 

예제

CREATE TABLE Departments (
    dept_id INT PRIMARY KEY,
    dept_name VARCHAR(50) NOT NULL
);

CREATE TABLE Employees (
    emp_id INT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    dept_id INT,
    FOREIGN KEY (dept_id) REFERENCES Departments(dept_id) ON DELETE CASCADE
);

 

 

 

참조 무결성 위반 예제

INSERT INTO Employees (emp_id, name, dept_id) VALUES (1, 'John Doe', 100);
-- 오류 발생: Departments 테이블에 dept_id=100이 존재하지 않기 때문에 삽입 불가

 

 

 

 

 

3️⃣ UNIQUE (고유 제약 조건)

  • 특정 컬럼의 값이 중복되지 않도록 보장
  • 여러 개의 UNIQUE 제약 조건을 가질 수 있음
  • PRIMARY KEY와의 차이점: UNIQUE는 NULL 허용 가능

 

예제

CREATE TABLE Users (
    user_id INT PRIMARY KEY,
    email VARCHAR(100) UNIQUE, -- 이메일은 중복될 수 없음
    username VARCHAR(50) UNIQUE -- 사용자 이름도 중복 불가
);

 

 

 

중복 데이터 삽입 시 오류

 

INSERT INTO Users (user_id, email, username) VALUES (1, 'test@example.com', 'user1');
INSERT INTO Users (user_id, email, username) VALUES (2, 'test@example.com', 'user2');
-- 오류 발생: email이 중복됨

 

 

 

 

 

4️⃣ NOT NULL (널 값 금지)

  • 해당 컬럼이 NULL 값을 가질 수 없도록 설정
  • 필수 입력 값 지정할 때 사용

 

예제

CREATE TABLE Products (
    product_id INT PRIMARY KEY,
    product_name VARCHAR(100) NOT NULL,
    price DECIMAL(10,2) NOT NULL
);

 

 

 

NULL 값 삽입 시 오류

INSERT INTO Products (product_id, product_name, price) VALUES (1, NULL, 500.00);
-- 오류 발생: product_name은 NULL 허용되지 않음

 

 

 

 

 

 

5️⃣ CHECK (데이터 검증)

  • 특정 컬럼이 지정된 조건을 만족하는지 검사
  • 값의 범위를 제한하는 데 사용

 

예제

CREATE TABLE Employees (
    emp_id INT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    age INT CHECK (age >= 18), -- 나이는 18세 이상이어야 함
    salary DECIMAL(10,2) CHECK (salary > 0) -- 급여는 0보다 커야 함
);

 

 

 

조건을 만족하지 않을 경우 오류

INSERT INTO Employees (emp_id, name, age, salary) VALUES (1, 'John Doe', 16, 5000.00);
-- 오류 발생: age 조건(age >= 18) 위반

 

 

 

 


 

 

 

 

 

3. 데이터 무결성을 유지하는 방법

 

 

1️⃣ 제약 조건(Constraints) 사용

  • `PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL, CHECK` 등을 활용하여 데이터 오류를 방지

 

 

2️⃣ 트랜잭션(Transaction) 활용

  • ACID(Atomicity, Consistency, Isolation, Durability) 원칙을 준수하여 데이터 변경을 안정적으로 처리

 

 

3️⃣ 정규화(Normalization) 적용

  • 중복을 최소화하고 데이터 무결성을 유지하기 위해 1NF, 2NF, 3NF 등의 정규화 단계 적용

 

 

4️⃣ 트리거(Trigger) 및 저장 프로시저 사용

  • 자동화된 데이터 검증 로직을 추가하여 데이터의 신뢰성을 높임

 

 

5️⃣ 백업 및 감사 로그 활용

  • 데이터 유실 및 변조를 방지하기 위해 정기적인 백업 및 로그 관리 수행

 

 

 

 


 

 

 

 

 

마무리

데이터 무결성(Integrity)은 데이터베이스 관리의 핵심 요소 중 하나이며, 이를 보장하기 위해 다양한 제약 조건(Constraints)이 사용된다.

 

  • 정확한 데이터 유지: `PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL, CHECK` 제약 조건을 활용
  • 데이터 일관성 보장: 트랜잭션과 정규화를 통해 무결성을 유지
  • 성능 및 유지보수성 고려: 너무 많은 제약 조건이 성능에 영향을 미칠 수 있으므로 균형을 유지하는 것이 중요

 

데이터 무결성과 제약 조건을 적절히 활용하면 신뢰성 높은 데이터베이스를 구축할 수 있다.

 

프로젝트에 맞는 적절한 전략을 적용하여 안정적인 시스템을 설계해 보세요! 

 

 

 

 

 

 

 

 


Reference

 

 

 

728x90
반응형