데이터베이스를 다루다 보면 반드시 알아야 하는 개념이 있습니다. 바로 '제약조건(Constraints)'입니다. 이번 포스팅에서는 제약조건의 개념과 종류, 그리고 실제 사용법에 대해 자세히 알아보겠습니다.
제약조건은 데이터베이스에서 데이터의 무결성을 보장하기 위해 설정하는 규칙입니다. 쉽게 말해, 데이터베이스에 부적절한 데이터가 입력되는 것을 방지하는 안전장치라고 할 수 있습니다.
제약조건을 사용하면 다음과 같은 이점이 있습니다:
| 제약조건 | 설명 | 키워드 |
|---|---|---|
| 필수 입력 | 특정 열에 반드시 값이 있어야 함 | NOT NULL |
| 중복 방지 | 중복된 값을 허용하지 않음 | UNIQUE |
| 기본 키 | 고유하고 NULL 값이 없는 필수 식별자 | PRIMARY KEY |
| 외래 키 | 다른 테이블의 값을 참조하여 일관성 유지 | FOREIGN KEY |
| 값 검사 | 특정 조건을 만족하는 값만 허용 | CHECK |
| 기본값 설정 | 값을 입력하지 않으면 기본값이 자동 입력됨 | DEFAULT |
제약조건은 크게 두 가지 방식으로 정의할 수 있습니다:
컬럼을 생성할 때 같이 정의하는 방식입니다.
CREATE TABLE 테이블명 (
컬럼명 자료형(크기) 제약조건,
컬럼명 자료형(크기) 제약조건,
컬럼명 자료형(크기)
);
모든 컬럼을 정의한 후 테이블 레벨에서 제약조건을 정의하는 방식입니다.
CREATE TABLE 테이블명 (
컬럼명 자료형(크기),
컬럼명 자료형(크기),
컬럼명 자료형(크기),
CONSTRAINT 제약조건명 제약조건(컬럼명)
);
-- 컬럼 레벨 제약조건 예시
CREATE TABLE employees (
emp_id NUMBER(5) PRIMARY KEY,
emp_name VARCHAR2(50) NOT NULL,
email VARCHAR2(100) UNIQUE,
hire_date DATE DEFAULT SYSDATE,
salary NUMBER(8,2) CHECK (salary > 0)
);
-- 테이블 레벨 제약조건 예시
CREATE TABLE orders (
order_id NUMBER(5),
emp_id NUMBER(5),
order_date DATE,
CONSTRAINT pk_orders PRIMARY KEY (order_id),
CONSTRAINT fk_emp FOREIGN KEY (emp_id)
REFERENCES employees(emp_id)
);
제약조건은 데이터베이스 설계에서 매우 중요한 요소입니다. 적절한 제약조건 설정을 통해 데이터의 무결성을 보장하고, 안정적인 데이터베이스 운영이 가능합니다.