[DataBase] 무결성 제약조건(Integrity Constraint)

김태희·2025년 7월 4일
0

데이터베이스

목록 보기
3/3
post-thumbnail

데이터 무결성이란 무엇인가?

데이터 무결성은 데이터베이스 내의 데이터에 대해 정확성(Accuracy), 일관성(Consistency), 유효성(Validity)을 유지하는 것을 의미한다.

즉, 데이터베이스에 저장된 값은 항상 의도된 형식과 규칙에 맞게 저장되어야 하며, 데이터 간의 관계 또한 모순이 없어야 한다.

데이터베이스 시스템(DBMS)은 이러한 무결성을 강제하기 위해 다양한 제약조건(Constraint) 기능을 제공한다.


데이터 무결성을 지키는 4가지 제약조건

1. 개체 무결성 (Entity Integrity)

기본 키(Primary Key)는 절대 NULL 값을 가질 수 없다.

개체 무결성은 테이블 내의 모든 행(Row)이 고유하게 식별될 수 있도록 보장하는 규칙이다.

이를 위해 사용되는 것이 바로 기본 키(Primary Key)이다.

2. 기본키 무결성 (Primary Key Integrity)

기본 키의 값은 중복될 수 없다.

만약 학생 테이블의 '학생 ID'가 없거나(NULL) 여러 학생이 동일한 ID를 가진다면 특정 학생을 정확하게 찾아내거나 구분할 수 없다.

PRIMARY KEY 활용

CREATE TABLE Student (
    StudentID INT PRIMARY KEY, -- StudentID는 NULL이거나 중복될 수 없다.
    StudentName VARCHAR(50) NOT NULL,
    Major VARCHAR(50)
);

3. 참조 무결성 (Referential Integrity)

외래 키(Foreign Key)는 부모 테이블의 기본 키에 존재하는 값이거나 NULL이어야 한다.

참조 무결성은 두 개의 테이블이 관계를 맺고 있을 때, 그 관계가 항상 유효하도록 보장하는 규칙이다. 이는 외래 키(Foreign Key)를 통해 지켜진다.

'수강' 테이블에 존재하지도 않는 '학생 ID'나 개설되지도 않은 '과목 코드'가 입력된다면 데이터는 의미를 잃는다.

참조 무결성은 이처럼 "없는 학생이 수강 신청을 하는" 등의 논리적 오류를 막아준다.

자식 테이블(수강)의 컬럼에 FOREIGN KEY 제약조건을 설정

-- 부모 테이블
CREATE TABLE Student (
    StudentID INT PRIMARY KEY,
    StudentName VARCHAR(50)
);

-- 자식 테이블
CREATE TABLE Enrollment (
    EnrollmentID INT PRIMARY KEY,
    StudentID INT, -- 이 컬럼이 외래 키가 된다.
    CourseCode VARCHAR(10),
    FOREIGN KEY (StudentID) REFERENCES Student(StudentID) -- Student 테이블의 StudentID를 참조한다.
);

이렇게 설정하면, Student 테이블에 존재하지 않는 StudentIDEnrollment 테이블에 삽입될 수 없다.

4. 도메인 무결성 (Domain Integrity)

컬럼에 저장되는 데이터는 정해진 규칙(타입, 제약조건)을 반드시 따라야 한다.

도메인 무결성은 테이블의 특정 컬럼에 입력될 데이터의 '범위(Domain)'를 사용자가 정한 규칙에 맞도록 강제하는 것이다.

'성별' 컬럼에 '남', '여' 외에 '99999' 같은 엉뚱한 값이 들어가거나, '나이' 컬럼에 음수 값이 들어가는 것을 막아야 데이터의 유효성이 보장된다.

데이터 타입(Data Type): INT, VARCHAR(10), DATE 등으로 타입을 지정한다.

NOT NULL: NULL 값 입력을 허용하지 않는다.

UNIQUE: 중복된 값을 허용하지 않는다.

CHECK: 특정 조건에 맞는 값만 허용한다. (예: 나이는 0보다 커야 한다)

DEFAULT: 값이 입력되지 않았을 때 기본으로 설정될 값을 지정한다.

CREATE TABLE Member (
    MemberID INT PRIMARY KEY,
    Gender CHAR(1) NOT NULL CHECK (Gender IN ('M', 'F')), -- 성별은 'M' 또는 'F'만 가능
    Age INT CHECK (Age > 0), -- 나이는 양수만 가능
    Email VARCHAR(100) UNIQUE, -- 이메일은 중복될 수 없다.
    JoinDate DATE DEFAULT NOW() -- 가입일은 기본으로 현재 날짜가 입력된다.
);

정규화와 무결성의 관계

정규화(Normalization)
데이터의 중복을 제거하고 테이블 구조를 효율적으로 만드는 설계 과정이다. 정규화를 잘하면 데이터 이상 현상이 줄어들어 무결성을 지키기 쉬워진다.

즉, 무결성을 위한 기반 공사이다.

무결성(Integrity)
설계된 구조 위에서 데이터의 정확성과 일관성을 보장하는 규칙이다.

0개의 댓글