데이터베이스 제약 조건과 키 (Constraints & Keys)
데이터베이스를 설계할 때는 데이터를 정확하고 일관되게 유지하기 위한 다양한 규칙이 필요합니다. 이러한 규칙을 제약 조건(Constraints)이라고 하며, 테이블 내에서 각 데이터를 고유하게 식별하고 테이블 간의 관계를 정의하는 키(Key)와 함께 사용됩니다. 이번 글에서는 제약 조건과 키에 대해 알아보고, 실제로 어떻게 활용할 수 있는지 예시를 통해 설명하겠습니다.
1. 제약 조건 (Constraints)
제약 조건은 테이블에 잘못된 데이터가 입력되는 것을 방지해 데이터의 무결성을 보장하는 중요한 역할을 합니다. 제약 조건을 설정하면 데이터베이스가 자동으로 데이터를 검증해, 부적합한 데이터를 차단할 수 있습니다.
- NOT NULL
NOT NULL은 컬럼에 빈 값(NULL)이 들어가는 것을 방지하는 제약 조건입니다. 반드시 값이 입력되도록 강제하는 역할을 합니다.
CREATE TABLE users (
id INT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL
);
위 예시에서 username
과 email
컬럼은 NOT NULL로 설정되어, 데이터 입력 시 반드시 값이 입력되어야만 합니다. 그렇지 않으면 에러가 발생합니다.
- UNIQUE
UNIQUE 제약 조건은 중복된 값을 허용하지 않습니다. 동일한 값이 두 번 입력되면 오류가 발생하게 됩니다. 다만, NULL 값은 중복되어도 오류를 발생시키지 않습니다.
CREATE TABLE products (
product_id INT PRIMARY KEY,
sku VARCHAR(50) UNIQUE,
name VARCHAR(100)
);
sku
필드는 UNIQUE 제약 조건이 적용되어 있어, 중복된 SKU 값을 입력할 수 없습니다. 하지만 NULL 값은 여러 번 입력이 가능합니다.
- DEFAULT
DEFAULT는 값을 입력하지 않을 경우 기본값을 설정해주는 제약 조건입니다. 데이터가 명시적으로 입력되지 않으면 기본값이 자동으로 입력됩니다.
CREATE TABLE orders (
order_id INT PRIMARY KEY,
order_date DATE DEFAULT CURRENT_DATE
);
order_date
컬럼에 값을 지정하지 않으면, 기본값으로 현재 날짜가 입력됩니다.
- CHECK
CHECK 제약 조건은 특정 조건을 만족하는 값만 입력되도록 제한합니다. 조건을 만족하지 않으면 오류가 발생합니다.
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
age INT CHECK (age >= 18)
);
위 예시에서는 CHECK 제약 조건을 통해 age
값이 18 이상일 경우에만 데이터가 저장되도록 설정했습니다.
제약 조건 관리
제약 조건은 테이블을 생성할 때뿐만 아니라, 기존 테이블에도 추가하거나 수정할 수 있습니다.
- 제약 조건 추가:
ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건이름 제약조건(속성);
- DEFAULT 제약 조건 수정:
ALTER TABLE 테이블명 ALTER 속성 SET DEFAULT 기본값;
- 제약 조건 삭제:
ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건이름;
- DEFAULT 제약 조건 삭제:
ALTER TABLE 테이블명 ALTER 속성 DROP DEFAULT;
2. 키 (Key)
키는 테이블 내의 데이터를 유일하게 식별하고, 테이블 간의 관계를 정의하는 데 사용됩니다. 데이터베이스 설계에서 가장 중요한 요소 중 하나로, 다양한 종류의 키가 있습니다.
- 기본키 (Primary Key)
기본키는 테이블에서 각 행을 고유하게 식별할 수 있도록 설정한 속성입니다. 기본키는 NULL 값을 가질 수 없고, 중복된 값도 허용되지 않습니다.
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);
customer_id
는 기본키로 설정되어 각 고객을 고유하게 식별할 수 있습니다.
- 외래키 (Foreign Key)
외래키는 다른 테이블의 기본키를 참조하는 속성입니다. 이를 통해 테이블 간의 관계를 정의합니다.
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
orders
테이블에서 customer_id
는 customers
테이블의 customer_id
를 참조하는 외래키입니다. 따라서 orders
테이블에 입력된 customer_id
는 반드시 customers
테이블에 존재해야 합니다.
- 후보키 (Candidate Key)
후보키는 기본키로 사용할 수 있는 모든 속성을 말합니다. 모든 후보키 중 하나가 기본키로 선택됩니다.
- 대체키 (Alternate Key)
대체키는 후보키 중에서 기본키로 선택되지 않은 속성입니다.
- 슈퍼키 (Super Key)
슈퍼키는 테이블에서 각 행을 고유하게 식별할 수 있는 속성 또는 속성의 조합입니다. 슈퍼키는 유일성을 보장하지만 최소성은 만족하지 않을 수 있습니다.
3. 무결성 제약 조건
키와 제약 조건을 통해 데이터베이스의 무결성을 보장할 수 있습니다. 이는 데이터의 정확성과 일관성을 유지하는 데 필수적입니다.
- 개체 무결성: 기본키는 NULL 값을 가질 수 없으며, 중복된 값도 허용되지 않습니다.
- 참조 무결성: 외래키는 참조된 테이블의 기본키 값과 일치하거나 NULL이어야 합니다.
- 도메인 무결성: 특정 속성 값은 해당 속성이 정의된 도메인 내에 속해야 합니다.
- NULL 무결성: 특정 속성은 NULL 값을 가질 수 없습니다.
- 고유 무결성: 각 행이 가지는 값은 고유해야 합니다.
- 키 무결성: 테이블에 최소 하나 이상의 키가 존재해야 합니다.
'SQL > 데이터베이스 기초' 카테고리의 다른 글
데이터 모델링 & ER다이어그램 (1) | 2024.10.13 |
---|---|
데이터베이스 개요 (1) | 2024.10.12 |