DBMS/개념

11_ 제약 조건

seungwon-1 2025. 9. 29. 11:40

제약 조건은 말 그대로 데이터에 제한을 걸어주는 규칙으로,
잘못된 값이 들어오는 걸 막아주고 데이터의 정확성과 신뢰성을 지켜주는 역할을 한다.


 

1. 제약 조건의 개념

제약 조건은 테이블의 컬럼에 특정 규칙을 부여해서
데이터가 비즈니스 규칙에 맞게 입력되도록 보장하는 기능이다.
이걸 설정해두면 프로그램 단에서 실수로 잘못된 데이터를 넣어도
데이터베이스가 스스로 걸러준다.

제약 조건의 목적

  • 데이터의 정확성과 일관성 유지
  • 잘못된 데이터 입력 방지
  • 데이터베이스의 신뢰성 확보

제약 조건을 설정하는 시점

  • 테이블 생성 시 CREATE TABLE과 함께 설정
  • 이미 만들어진 테이블에 ALTER TABLE로 추가하거나 수정 가능
-- 테이블 생성 시 제약 조건 설정
CREATE TABLE 직원 (
    직원ID NUMBER CONSTRAINT PK_직원 PRIMARY KEY,
    이름 VARCHAR2(50) CONSTRAINT NN_직원_이름 NOT NULL
);

-- 테이블 생성 후 제약 조건 추가
ALTER TABLE 직원
ADD CONSTRAINT UK_직원_이메일 UNIQUE (이메일);

 

2. 제약 조건의 종류

(1) PRIMARY KEY (기본 키)

  • 각 행을 고유하게 식별하는 키
  • 중복 불가, NULL 불가
  • 테이블당 하나만 존재 가능
CREATE TABLE 학생 (
    학번 NUMBER PRIMARY KEY,
    이름 VARCHAR2(50)
);

(2) FOREIGN KEY (외래 키)

  • 다른 테이블의 PRIMARY KEY를 참조
  • 테이블 간 관계를 정의
  • 참조 무결성을 유지
  • 부모 데이터가 삭제될 때의 동작을 옵션으로 지정 가능

옵션 종류:

  • ON DELETE CASCADE: 부모가 삭제되면 자식도 같이 삭제
  • ON DELETE SET NULL: 부모가 삭제되면 자식의 외래 키를 NULL로 설정
CREATE TABLE 학생 (
    학번 NUMBER PRIMARY KEY,
    학과코드 NUMBER,
    CONSTRAINT FK_학과 FOREIGN KEY (학과코드)
    REFERENCES 학과(학과코드) ON DELETE CASCADE
);

(3) UNIQUE

  • 중복값 입력을 허용하지 않음
  • NULL은 허용
  • 하나의 테이블 안에 여러 개의 UNIQUE 컬럼 가능
CREATE TABLE 사용자 (
    사용자ID NUMBER PRIMARY KEY,
    이메일 VARCHAR2(100) UNIQUE
);

 

(4) NOT NULL

  • NULL 값 입력 불가
  • 필수적으로 값이 입력되어야 하는 컬럼에 사용
CREATE TABLE 제품 (
    제품ID NUMBER PRIMARY KEY,
    제품명 VARCHAR2(100) NOT NULL,
    가격 NUMBER NOT NULL
);

(5) CHECK

  • 특정 조건을 만족하는 값만 입력 가능
  • 조건식을 지정하여 제약을 걸 수 있음
CREATE TABLE 직원 (
    직원ID NUMBER PRIMARY KEY,
    급여 NUMBER CHECK (급여 >= 2000000),
    성별 CHAR(1) CHECK (성별 IN ('남', '여'))
);

(6) DEFAULT

  • 값을 입력하지 않았을 때 자동으로 지정되는 기본값
  • INSERT 시 해당 컬럼이 생략되면 DEFAULT 값이 사용됨
CREATE TABLE 게시글 (
    게시글ID NUMBER PRIMARY KEY,
    작성일 DATE DEFAULT SYSDATE
);

3. 제약 조건 이름 지정

제약 조건에 이름을 붙여두면
에러 발생 시 어떤 제약 조건이 위반됐는지 확인하기 쉽고,
나중에 수정하거나 삭제할 때도 편리하다.

보통 이름은 다음 규칙으로 작성한다:

  • PK_테이블명_컬럼명
  • FK_테이블명_컬럼명
  • UK_테이블명_컬럼명
  • CK_테이블명_컬럼명
  • NN_테이블명_컬럼명

이런식의 규칙을 가지고 있지만 이렇게 쓰면 나중에 수정 삭제를 할 때 편리하다.

CONSTRAINT PK_학생_학번 PRIMARY KEY (학번)
CONSTRAINT FK_수강_과목코드 FOREIGN KEY (과목코드) REFERENCES 과목(과목코드)

4. 종합 예시

여러 제약 조건을 한 번에 적용한 예시다.

CREATE TABLE 학생 (
    학번 NUMBER PRIMARY KEY,
    이름 VARCHAR2(50) NOT NULL,
    나이 NUMBER CHECK (나이 > 0 AND 나이 < 100),
    학과코드 NUMBER,
    이메일 VARCHAR2(100) UNIQUE,
    입학일 DATE DEFAULT SYSDATE,
    성별 CHAR(1) CHECK (성별 IN ('남', '여')),
    FOREIGN KEY (학과코드) REFERENCES 학과(학과코드)
);
 

설명:

  • PRIMARY KEY: 학번은 고유해야 함
  • NOT NULL: 이름은 반드시 입력해야 함
  • CHECK: 나이는 0보다 크고 100보다 작아야 함
  • UNIQUE: 이메일은 중복 불가
  • DEFAULT: 입학일을 입력하지 않으면 현재 날짜 자동 설정
  • FOREIGN KEY: 학과코드는 학과 테이블의 학과코드를 참조

 

제약 조건 설명

PRIMARY KEY 행을 고유하게 식별 (중복, NULL 불가)
FOREIGN KEY 다른 테이블의 키를 참조 (관계 설정)
UNIQUE 중복된 값 입력 불가 (NULL은 허용)
NOT NULL NULL 입력 불가, 필수 값
CHECK 조건을 만족하는 값만 허용
DEFAULT 기본값 자동 입력

'DBMS > 개념' 카테고리의 다른 글

13_ 시퀀스  (0) 2025.10.03
12_ ALTER문  (0) 2025.10.01
10_ 설계의 3단계  (0) 2025.09.27
09_ 날짜와 시간 함수  (0) 2025.09.25
08_ DBMS 형변환  (0) 2025.09.23