참고 - YouTube: 쉬운코드
제약조건(Constraints)
은 데이터베이스에서 가장 중요한 개념 중 하나입니다.
데이터베이스 설계를 할 때, 데이터의 일관성, 무결성, 보안 등을 유지하기 위해 여러 종류의 제약조건을 사용합니다.
이번 글에서는 데이터베이스에서의 제약 조건(Constraints)
에 대해 자세히 살펴보도록 하겠습니다.
Primary Key
는 각 행(row)을 고유하게 식별할 수 있는 열 또는 열의 집합입니다.
Primary Key
는 하나의 테이블에서 유일해야 하며, Null 값을 가질 수 없습니다.
Primary Key
는 다른 테이블의 Foreign Key
와 연결됩니다.
NOT NULL과 UNIQUE를 합친 것으로, 테이블에서 대표되는 컬럼을 의미합니다.
예를 들어,
회원 정보를 저장하는 테이블에서는 각 회원을 구분할 수 있는
고유한 번호(ID)
가 필요합니다.
이때,ID 열
을Primary Key
로 설정하면 각 회원을 구분할 수 있으며,
다른 테이블에서 이 회원 정보를 참조할 때도Primary Key
를 활용할 수 있습니다.
create table DEPARTMENT (
id INT PRIMARY KEY
...
);
create table PLAYER (
team_id VARCHAR(12),
back_bumber INT,
...
PRIMARY KEY (team_id, back_number)
);
Foreign Key
는 다른 테이블의 Primary Key
와 연결된 열입니다.
Foreign Key
를 사용하여 두 개 이상의 테이블 간의 관계를 설정할 수 있습니다.
Foreign Key
를 설정하면, 한 테이블에서 다른 테이블의 데이터를 참조할 수 있습니다.
참조하는 테이블에서 존재하는 값만 사용 가능을 의미합니다.
만약에 참조하는 테이블에 해당하는 값이 없을 때에는 INSERT, UPDATE시에 오류를 발생시킵니다.
reference_option | 설명 |
---|---|
CASCADE | 참조값의 삭제/변경을 그대로 반영 |
SET NULL | 참조값이 삭제/변경 시 NULL로 변경 |
RESTRICT | 참조값이 삭제/변경되는 것을 금지 |
NO ACTION | RESTRICT와 유사 |
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
...
);
NOT NULL
은 데이터베이스에서 가장 기본적인 제약조건입니다.
이 제약조건은 특정 열(column)에 null 값을 저장하지 못하도록 합니다.
이 제약조건을 설정하면 해당 열에는 null 값을 입력할 수 없습니다.
예를 들어,
회원가입 시에는 아이디(ID)와 비밀번호(PASSWORD)를 입력해야 합니다.
이때, 아이디와 비밀번호는 반드시 입력되어야 하므로, 이 두 열에 NOT NULL 제약조건을 설정할 수 있습니다.
create table STUDENT (
...
phone_number INT NOT NULL UNIQUE,
...
);
UNIQUE
는 특정 열의 값이 유일해야 함을 나타내는 제약조건입니다.
즉, 해당 열의 모든 값은 중복되지 않아야 합니다.
UNIQUE
제약조건을 설정하면, 해당 열에 동일한 값을 입력할 수 없습니다.
하지만 NULL값에 대해서는 제약이 적용되지 않기 때문에 여러 개의 NULL값을 넣을 수 있습니다.
예를 들어,
회원가입 시에는 아이디(ID)가 중복되지 않도록 해야 합니다.
이때, ID 열에UNIQUE
제약조건을 설정하면, 동일한 아이디를 입력할 수 없습니다.
create table PLAYER (
id INT UNIQUE
...
);
create table PLAYER (
team_id VARCHAR(12),
back_bumber INT,
...
UNIQUE (team_id, back_number)
);
CHECK
제약조건은 데이터의 유효성 검사를 위해 사용됩니다.
주어진 조건에 해당하는 값만 입력가능을 의미합니다.
예를 들어,
나이(age) 열의 CHECK 제약조건이 18세 이상이어야 한다면, 18세 미만의 값은 입력할 수 없습니다.
create table EMPLOYEE (
...
age INT CHECK (age >= 20)
...
);
create table PROJECT (
start_date DATE,
end_date DATE,
...
CHECK (start_date < end_date)
);
DEFAULT
제약조건은 특정 열에 기본값을 지정할 때 사용됩니다.
열에 데이터가 입력되지 않았을 경우, 해당 열은 지정된 기본값으로 자동으로 설정
됩니다.
create table ORDERS (
...
menu VARCHAR(15) DEFAULT '짜장면',
...
);
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를 사용하는 것이 중요합니다.