[데이터베이스] 제약 조건(Constraints)

Yoon Uk·2023년 3월 5일
0

데이터베이스

목록 보기
2/20
post-thumbnail

참고 - YouTube: 쉬운코드

제약조건(Constraints)은 데이터베이스에서 가장 중요한 개념 중 하나입니다.
데이터베이스 설계를 할 때, 데이터의 일관성, 무결성, 보안 등을 유지하기 위해 여러 종류의 제약조건을 사용합니다.

이번 글에서는 데이터베이스에서의 제약 조건(Constraints)에 대해 자세히 살펴보도록 하겠습니다.


종류

1. PRIMARY KEY

Primary Key각 행(row)을 고유하게 식별할 수 있는 열 또는 열의 집합입니다.
Primary Key하나의 테이블에서 유일해야 하며, Null 값을 가질 수 없습니다.
Primary Key는 다른 테이블의 Foreign Key와 연결됩니다.

NOT NULL과 UNIQUE를 합친 것으로, 테이블에서 대표되는 컬럼을 의미합니다.

예를 들어,

회원 정보를 저장하는 테이블에서는 각 회원을 구분할 수 있는 고유한 번호(ID)가 필요합니다.
이때, ID 열Primary Key로 설정하면 각 회원을 구분할 수 있으며,
다른 테이블에서 이 회원 정보를 참조할 때도 Primary Key를 활용할 수 있습니다.

  • attribute 하나로 구성될 때
create table DEPARTMENT (
	id  INT  PRIMARY KEY
    ...
);
  • attribute 하나 이상으로 구성될 때
create table PLAYER (
	team_id  VARCHAR(12),
    back_bumber   INT,
    ...
    PRIMARY KEY (team_id, back_number)
);

2. FOREIGN KEY

Foreign Key는 다른 테이블의 Primary Key와 연결된 열입니다.
Foreign Key를 사용하여 두 개 이상의 테이블 간의 관계를 설정할 수 있습니다.
Foreign Key를 설정하면, 한 테이블에서 다른 테이블의 데이터를 참조할 수 있습니다.

참조하는 테이블에서 존재하는 값만 사용 가능을 의미합니다.
만약에 참조하는 테이블에 해당하는 값이 없을 때에는 INSERT, UPDATE시에 오류를 발생시킵니다.

  • FOREIGN KEY를 선언하는 방법은 아래와 같다
reference_option설명
CASCADE참조값의 삭제/변경을 그대로 반영
SET NULL참조값이 삭제/변경 시 NULL로 변경
RESTRICT참조값이 삭제/변경되는 것을 금지
NO ACTIONRESTRICT와 유사
SET DEFAULT참조값이 삭제/변경 시 default 값으로 변경

예를 들어,

주문 정보를 저장하는 테이블에서는 각 주문이 어떤 회원에 의해 발생되었는지를 Foreign Key를 통해 참조할 수 있습니다.

create table EMPLOYEE (
	...
	depth_id  INT,
    FOREIGN KEY (depth_id)
    	references DEPARTMENT(id)
        on delete reference_option
        on update reference_option
    ...
);

3. NOT NULL

NOT NULL은 데이터베이스에서 가장 기본적인 제약조건입니다.
이 제약조건은 특정 열(column)에 null 값을 저장하지 못하도록 합니다.
이 제약조건을 설정하면 해당 열에는 null 값을 입력할 수 없습니다.

예를 들어,

회원가입 시에는 아이디(ID)와 비밀번호(PASSWORD)를 입력해야 합니다.
이때, 아이디와 비밀번호는 반드시 입력되어야 하므로, 이 두 열에 NOT NULL 제약조건을 설정할 수 있습니다.

create table STUDENT (
	...
	phone_number  INT  NOT NULL  UNIQUE,
    ...
);

4. UNIQUE

UNIQUE특정 열의 값이 유일해야 함을 나타내는 제약조건입니다.
즉, 해당 열의 모든 값은 중복되지 않아야 합니다.
UNIQUE 제약조건을 설정하면, 해당 열에 동일한 값을 입력할 수 없습니다.

하지만 NULL값에 대해서는 제약이 적용되지 않기 때문에 여러 개의 NULL값을 넣을 수 있습니다.

예를 들어,

회원가입 시에는 아이디(ID)가 중복되지 않도록 해야 합니다.
이때, ID 열에 UNIQUE 제약조건을 설정하면, 동일한 아이디를 입력할 수 없습니다.

  • attribute 하나로 구성될 때
create table PLAYER (
	id  INT  UNIQUE
    ...
);
  • attribute 하나 이상으로 구성될 때
create table PLAYER (
	team_id  VARCHAR(12),
    back_bumber   INT,
    ...
    UNIQUE (team_id, back_number)
);

5. CHECK

CHECK 제약조건은 데이터의 유효성 검사를 위해 사용됩니다.

주어진 조건에 해당하는 값만 입력가능을 의미합니다.

예를 들어,

나이(age) 열의 CHECK 제약조건이 18세 이상이어야 한다면, 18세 미만의 값은 입력할 수 없습니다.

  • attribute 하나로 구성될 때
create table EMPLOYEE (
	...
	age  INT  CHECK (age >= 20)
    ...
);
  • attribute 하나 이상으로 구성될 때
create table PROJECT (
	start_date  DATE,
    end_date   DATE,
    ...
    CHECK (start_date < end_date)
);

6. DEFAULT

DEFAULT 제약조건은 특정 열에 기본값을 지정할 때 사용됩니다.
열에 데이터가 입력되지 않았을 경우, 해당 열은 지정된 기본값으로 자동으로 설정됩니다.

create table ORDERS (
	...
	menu  VARCHAR(15)  DEFAULT '짜장면',
    ...
);

Constraint 이름 명시하는 방법

  • 이름을 붙이면 어떤 constraint를 위반했는지 쉽게 파악할 수 있습니다.
  • constraint를 삭제하고 싶을 때 해당 이름으로 삭제 가능합니다.
create table TEST (
	age  INT  CONSTRAINT  age_over_20 CHECK (age > 20)
);
CONSTRAINT age_over_20 이름을 붙였을 때CONSTRAINT age_over_20 이름을 생략했을 때
Check constraint 'age_over_20' is violated.Check constraint 'test_chk_1' is violated.

주의 사항

constraints를 지나치게 많이 사용하면 데이터베이스의 성능에 부정적인 영향을 미칠 수 있습니다. 따라서, 데이터베이스를 설계할 때는 적절한 수의 constraints를 사용하는 것이 중요합니다.

0개의 댓글