데이터베이스 설계에서 제약조건은 데이터 무결성을 유지하고, 데이터의 품질을 보장하기 위해 필수적인 요소입니다. 이번 포스팅에서는 주요 제약조건의 종류와 각각의 역할, 예시를 상세히 설명하겠습니다.
제약조건의 정의
제약조건(Constraint)은 테이블 내의 데이터에 대해 특정 규칙을 설정하여, 데이터의 무결성과 일관성을 유지하는 역할을 합니다. 데이터베이스에서 제약조건은 주로 다음과 같은 종류로 나눌 수 있습니다:
1. NOT NULL
정의: 이 제약조건은 특정 열이 NULL 값을 가질 수 없음을 지정합니다. 즉, 해당 열은 반드시 값이 존재해야 하며, 데이터 입력 시 반드시 값을 제공해야 합니다.
용도: 필수적인 정보를 담고 있는 열에 사용되며, 예를 들어, 사용자 이름이나 이메일 주소와 같은 필드는 NULL이 허용되지 않아야 합니다.
예시:
CREATE TABLE Users ( user_id NUMBER PRIMARY KEY, username VARCHAR2(50) NOT NULL, email VARCHAR2(100) NOT NULL );
2. UNIQUE
정의: 이 제약조건은 테이블의 특정 열 또는 열의 조합이 유일해야 함을 지정합니다. 즉, 해당 열에는 중복된 값이 허용되지 않습니다.
용도: 사용자 이름, 이메일 주소 등과 같이 중복되지 않아야 하는 정보를 저장할 때 유용합니다.
예시:
CREATE TABLE Employees ( employee_id NUMBER PRIMARY KEY, email VARCHAR2(100) UNIQUE, phone_number VARCHAR2(20) );
3. PRIMARY KEY
정의: PRIMARY KEY는 테이블의 각 행을 유일하게 식별하는 열을 의미합니다. PRIMARY KEY는 반드시 유일해야 하며 NULL 값을 가질 수 없습니다.
용도: 테이블에서 각 행을 고유하게 식별할 수 있도록 하며, 다른 테이블의 FOREIGN KEY로 참조될 수 있습니다.
예시:
CREATE TABLE Products ( product_id NUMBER PRIMARY KEY, product_name VARCHAR2(100), price NUMBER(10,2) );
4. FOREIGN KEY
정의: FOREIGN KEY는 다른 테이블의 PRIMARY KEY를 참조하여 테이블 간의 관계를 설정합니다. 이 제약조건을 통해 두 테이블 간의 관계를 유지하고, 데이터 무결성을 보장합니다.
용도: 예를 들어, 주문 테이블이 고객 테이블의 고객 ID를 참조할 때 사용됩니다. 이를 통해 참조된 데이터가 반드시 존재하도록 강제합니다.
예시:
CREATE TABLE Orders ( order_id NUMBER PRIMARY KEY, customer_id NUMBER, FOREIGN KEY (customer_id) REFERENCES Customers(customer_id) );
5. CHECK
정의: CHECK 제약조건은 특정 조건을 만족하는지를 검사하는 역할을 합니다. 이 조건을 만족하지 않는 데이터는 테이블에 삽입될 수 없습니다.
용도: 유효한 데이터만 입력할 수 있도록 제한하여, 예를 들어 나이, 성적 등 특정 범위에 속해야 하는 데이터를 검증할 때 사용됩니다.
예시:
CREATE TABLE Employees ( employee_id NUMBER PRIMARY KEY, salary NUMBER CHECK (salary > 0), age NUMBER CHECK (age BETWEEN 18 AND 65) );
제약조건의 중요성
제약조건은 데이터베이스 설계 시 매우 중요합니다. 데이터의 일관성을 유지하고, 잘못된 데이터 입력을 방지하는 데 큰 역할을 합니다. 예를 들어, NOT NULL 제약조건을 사용하면 필수 정보를 누락할 수 없도록 보장하고, FOREIGN KEY 제약조건을 통해 관련 데이터 간의 무결성을 유지할 수 있습니다.
제약조건 설정 및 관리
제약조건은 테이블 생성 시 정의할 수 있으며, 필요에 따라 ALTER TABLE 명령어를 사용하여 추가하거나 변경할 수 있습니다.
제약조건 추가 예시:
ALTER TABLE Employees ADD CONSTRAINT chk_age CHECK (age BETWEEN 18 AND 65);
제약조건 삭제 예시:
ALTER TABLE Employees DROP CONSTRAINT chk_age;
'🗄️ Backend > SQL' 카테고리의 다른 글
SQL 인덱스 개요 (0) | 2024.10.15 |
---|---|
뷰 생성, 관리 및 시퀀스 (4) | 2024.10.14 |
데이터베이스 트랜잭션 및 테이블 관리 (0) | 2024.10.14 |
SQL 서브쿼리 (Subquery)와 데이터 조작 명령어 (DML) 정리 (4) | 2024.10.14 |
그룹 함수 및 조인 함수 구문 (0) | 2024.10.11 |