CS/DB

데이터 무결성과 일관성

rlatotquf45 2025. 1. 5. 22:26
728x90
반응형

무결성과 일관성

소개

데이터베이스에 저장되는 데이터들이 띄어야 하는 성질인 무결성과 일관성에 대해 간략하게 설명하겠습니다.

목차

주제 개요

데이터 무결성 (Data Integrity) : 데이터가 정확하고 일관되며 신뢰할 수 있는 상태를 유지하는 것.

  • 엔티티 무결성(Entity Integrity) : 테이블의 각 행을 고유하게 식별하기 위해, PRIMARY KEY가 필요함
  • 참조 무결성(Referential Integrity) : 테이블 간의 관계를 보장하기 위해 FOREIGN KEY 사용
CREATE TABLE departments (
    id NUMBER PRIMARY KEY,
    name VARCHAR2(100)
);

CREATE TABLE employees (
    id NUMBER PRIMARY KEY,
    department_id NUMBER REFERENCES departments(id)
);
  • 도메인 무결성(Domain Integrity) : 열의 값이 특정 도메인(유효 범위) 내에 있어야 함.
CREATE TABLE employees (
    salary NUMBER CHECK (salary > 0)  -- 급여는 0보다 커야 함
);
  • 사용자 정의 무결성(User-difined Integrity) : 특정 비즈니스 규칙을 기반으로 데이터 무결성 정의.
    • ex) PL/SQL을 활용한 사용자 정의 제약 조건

 

데이터 일관성 (Data Consistency) : 데이터베이스의 데이터가 모든 사용자에게 동일한 상태로 유지되는 것.

보장 방식

  • 트랜잭션 관리 : 트랜잭션은 하나의 작업 단위로 처리되며, 모든 작업이 성공적으로 완료되거나 전부 취소되어야 함.
    • COMMIT : 트랜잭션 완료 시 데이터 저장.
    • ROLLBACK : 트랜잭션 오류 시 데이터 복구.
      • 현재 트랜잭션 내에서만 영향 미침
      • 이전에 COMMIT한 작업은 ROLLBACK으로 취소 불가
    • SAVEPOINT : 특정 시점까지 트랜잭션을 부분적으로 롤백할 수 있음.
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;

 

SAVEPOINT 예제

-- 새로운 데이터 삽입
INSERT INTO employees (employee_id, name, salary) VALUES (5, 'Eve', 3500);

-- 저장점 설정
SAVEPOINT before_update;

-- 데이터 업데이트
UPDATE employees SET salary = 7000 WHERE employee_id = 1;

-- 데이터 확인
SELECT * FROM employees;

-- 저장점까지 롤백
ROLLBACK TO before_update;

-- 롤백 후 데이터 확인
SELECT * FROM employees;

> SAVEPOINT 이후 실행된 데이터 업데이트가 취소되고 "Eve"의 데이터 삽입은 유지됨.

 

ACID 특성

  • 원자성(Atomicity) : 모든 작업이 완료되거나 모두 실행되지 않아야 함.
  • 일관성(Consistency) : 트랜잭션 전후로 데이터 무결성 유지.
  • 고립성(Isolation) : 다른 트랜잭션의 중간 상태에 영향을 받지 않음.
  • 지속성(Durability) : 트랜잭션 완료 후 데이터가 영구적으로 저장 됨.

 

728x90
반응형

'CS > DB' 카테고리의 다른 글

SQL의 세 가지 주요 역할 : DDL, DML, DCL  (0) 2025.01.05
SQL 개요와 RDBMS  (0) 2025.01.05