[DB] 제약 조건

do_it·2025년 10월 31일

database

목록 보기
3/11

제약 조건?

제약 조건핵심 규칙목적 (예시)
NOT NULLNULL 값 비허용(필수 입력) 이름, 아이디
UNIQUE중복 값 비허용(유일성 보장) 이메일, 주민번호
PRIMARY KEYNOT NULL + UNIQUE(행의 고유 식별) 학번, 회원ID
FOREIGN KEY다른 테이블의 PK만 참조 가능(테이블 관계 연결) 수강신청학번
CHECK지정된 조건 만족(데이터 검증) 나이 > 0, 성별 IN ('남', '여')
DEFAULT값 생략 시 자동 입력(기본값 설정) 포인트 = 0, 가입일 = 오늘 날짜

DB 설계에서 데이터의 정합성(Intergrity)을 유지하고, 무결성(Consistency)을 보장하기 위해 사용되는 규칙

  • 제약 조건은 테이블에 삽입, 업데이트, 삭제되는 데이터가 특정 조건을 만족하도록 강제하는 규칙

제약 조건을 사용해야 하는 이유

  • 데이터 무결성 유지: 데이터의 유효성 & 일관성
  • 참조 무결성 유지: 외래 키
  • 비즈니스 로직 강제: CHECK
  • 중복 데이터 방지: UNIQUE

1. NOT NULL

컬럼에 NULL 값이 들어가는 것을 방지

  • 해당 칼럼에는 값이 반드시 존재해야 함
  • 중요한 데이터가 누락되는 것을 방지하기 위해 사용됨
CREATE TABLE Employees (
    employee_id INT NOT NULL,
    name VARCHAR(100) NOT NULL,
    hire_date DATE
);

2. UNIQUE

컬럼에 중복된 값이 들어가는 것을 방지

  • 해당 컬럼은 유일한 값만 저장할 수 있게됨
  • 중복 데이터를 방지하고, 데이터의 고유성을 보장함
CREATE TABLE Users (
    user_id INT NOT NULL UNIQUE,
    email VARCHAR(100) UNIQUE
);

3. PRIMARY KEY

테이블에서 각 레코드를 고유하게 식별할 수 있는 칼럼

  • 기본키는 반드시 고유하며, NULL 값을 허용하지 않음
CREATE TABLE Customers (
    customer_id INT PRIMARY KEY,
    name VARCHAR(100)
);

4. FOREIGN KEY

다른 테이블의 기본 키나 고유 키를 참조하여 테이블 간의 관계를 정의

  • 두 테이블 간의 참조 무결성을 유지하며
    한 테이블의 값이 다른 테이블에 존재하는 값이어야 한다는 규칙을 강제
CREATE TABLE Orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    order_date DATE,
    FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
);
# Orders 테이블의 customer_id가 Customers 테이블의 customer_id를 참조하도록 외래 키 제약을 설정

5. CHECK

칼럼의 값이 지정된 조건을 만족하는지 검사 → 데이터 유효성 보장

  • 비즈니스 규칙 반영에 유용함
    수치, 날짜 등의 값에 대해 범위 조건을 지정하거나, 문자열 패턴을 확인하는 데 사용
CREATE TABLE Employees (
    employee_id INT PRIMARY KEY,
    salary DECIMAL(10, 2),
    CHECK (salary >= 0) # salary는 음수가 될 수 없음
);

6. DEFAULT

칼럼에 값이 입력되지 않았을 경우 기본값을 자동으로 삽입

  • 데이터 입력 시 해당 칼럼이 비어있으면 기본값이 자동을 삽입됨
CREATE TABLE Orders (
    order_id INT PRIMARY KEY,
    order_status VARCHAR(20) DEFAULT 'Pending'
);

7. INDEX

칼럼에 인덱스를 생성하는 기능

  • 인덱스를 사용하면 조회 성능이 향상되지만,
    삽입/ 업데이트 성능은 다소 저하될 수 있음
    → 주로 검색 성능을 최적화하는 데 사용됨
  • 기본키, 고유키는 자동으로 인덱스를 생성하지만 명시적으로 인덱스를 생성할 수도 있음
CREATE INDEX idx_employee_name ON Employees (name);
# Employees 테이블의 name 컬럼에 대해 인덱스를 생성 (검색 성능 향상)

0개의 댓글