PRIMARY KEY: 고유 식별자
정의
PRIMARY KEY는 테이블 내에서 각 행(row)을 고유하게 식별하는 데 사용됩니다. PRIMARY KEY는 NULL 값을 허용하지 않으며, 모든 값이 고유해야 합니다. 테이블의 기본 식별자 역할을 하며, 데이터 검색과 참조 무결성 유지에 필수적입니다.
사용 예시
학생 정보를 저장하는 students
테이블에서 student_id
필드를 PRIMARY KEY로 설정합니다:
CREATE TABLE students (
student_id INT NOT NULL,
name VARCHAR(50),
age INT,
PRIMARY KEY (student_id)
);
이 설정은 각 학생을 고유하게 식별하며, 데이터 중복을 방지합니다.
복합 키
두 개 이상의 열을 결합해 고유한 식별자를 생성하는 복합 PRIMARY KEY는 다대다 관계를 관리할 때 유용합니다. 예를 들어:
CREATE TABLE grades (
student_id INT NOT NULL,
subject VARCHAR(50) NOT NULL,
grade CHAR(1),
PRIMARY KEY (student_id, subject)
);
동일한 학생이 같은 과목에 대해 여러 성적을 가질 수 없도록 보장합니다.
FOREIGN KEY: 테이블 간 관계 정의
정의
FOREIGN KEY는 한 테이블의 열이 다른 테이블의 PRIMARY KEY를 참조하도록 설정하여 테이블 간의 관계를 정의합니다. FOREIGN KEY는 참조 무결성을 유지하며 데이터의 일관성을 보장합니다.
사용 예시
고객과 주문 정보를 관리하는 테이블:
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);
CREATE TABLE orders (
order_id INT PRIMARY KEY,
order_date DATE,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
이 설정은 존재하지 않는 고객에 대한 주문을 방지합니다.
ON DELETE 및 ON UPDATE
FOREIGN KEY는 데이터 변경 시 동작 방식을 정의하는 옵션을 지원합니다:
- ON DELETE CASCADE: 부모 데이터 삭제 시 관련 자식 데이터도 삭제됩니다.
- ON UPDATE CASCADE: 부모 데이터 수정 시 자식 데이터가 자동으로 업데이트됩니다.
예시:
CREATE TABLE orders (
order_id INT PRIMARY KEY,
order_date DATE,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON DELETE CASCADE
);
UNIQUE: 고유한 데이터 보장
정의
UNIQUE 제약 조건은 특정 열 또는 열 조합의 값이 테이블 내에서 고유하도록 보장합니다. UNIQUE는 PRIMARY KEY와 유사하지만 NULL 값을 허용한다는 점에서 차이가 있습니다.
사용 예시
사용자 이메일이 중복되지 않도록 설정:
CREATE TABLE users (
user_id INT PRIMARY KEY,
email VARCHAR(255) UNIQUE,
name VARCHAR(100)
);
다중 열 UNIQUE
두 열의 조합이 고유해야 하는 경우:
CREATE TABLE orders (
order_id INT PRIMARY KEY,
product_id INT,
customer_id INT,
UNIQUE (product_id, customer_id)
);
이 설정은 동일한 고객이 같은 제품을 여러 번 주문하는 것을 방지합니다.
CHECK: 유효성 검사
정의
CHECK 제약 조건은 특정 열이 정의된 조건을 충족해야 한다는 규칙을 강제합니다. 이를 통해 잘못된 데이터를 방지하고 데이터의 유효성을 보장합니다.
사용 예시
학생 나이가 0 이상이어야 한다는 조건:
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(100),
age INT,
CONSTRAINT chk_age CHECK (age >= 0)
);
복잡한 조건
논리적 조건을 포함한 복합 유효성 검사:
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
salary DECIMAL(10,2),
hire_date DATE,
CONSTRAINT chk_salary_hiredate CHECK (salary > 0 AND hire_date <= CURRENT_DATE)
);
NOT NULL: 필수 데이터 강제
정의
NOT NULL 제약 조건은 특정 열에 NULL 값을 허용하지 않아 필수 데이터 입력을 강제합니다.
사용 예시
이메일이 반드시 입력되어야 하는 경우:
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL
);
기존 테이블에 적용
NOT NULL 제약 조건을 기존 열에 추가하려면 다음과 같이 설정합니다:
ALTER TABLE employees
MODIFY COLUMN email VARCHAR(100) NOT NULL;
결론
제약 조건은 데이터베이스 무결성을 유지하고 효율적인 데이터 관리를 가능하게 하는 핵심 도구입니다. PRIMARY KEY는 데이터의 고유성을 보장하고, FOREIGN KEY는 테이블 간 관계를 정의하며, UNIQUE는 데이터 중복을 방지합니다. CHECK는 데이터의 유효성을 검사하고, NOT NULL은 필수 데이터를 강제합니다.
이러한 제약 조건들을 적절히 활용하면 데이터베이스의 안정성과 신뢰성을 높일 수 있습니다. 데이터베이스 설계 시 신중하게 제약 조건을 설정하면 비즈니스 요구사항을 충족시키고, 장기적인 성공을 보장할 수 있습니다.
'데이타베이스 > SQL' 카테고리의 다른 글
데이터베이스 성능 최적화: 인덱스 활용과 쿼리 최적화 (0) | 2025.01.29 |
---|---|
데이터베이스 트랜잭션 관리: 안정성과 무결성의 열쇠 (1) | 2025.01.29 |
서브쿼리 및 상관 서브쿼리: 데이터베이스 질의의 핵심 도구 (0) | 2025.01.29 |
SQL에서의 함수 및 연산자 활용: 데이터 분석을 위한 종합 가이드 (0) | 2025.01.28 |
SQL 조인(JOIN)의 완벽 가이드: 데이터베이스 테이블 결합의 모든 것 (0) | 2025.01.28 |