Lsiron
제약 조건과 키 본문
제약 조건 (Constraints)
제약 조건이란? 데이터베이스 테이블에서 데이터의 무결성(Integrity)과 일관성(Consistency)을 유지하기 위해 사용되는 규칙이다.
제약 조건을 통해 데이터베이스에 저장될 수 있는 데이터의 유형과 관계를 정의할 수 있다.
제약 조건은 테이블을 생성할 때 또는 테이블이 생성된 후에 추가할 수 있다.
즉, 테이블에 잘못된 데이터가 입력되는 것을 방지하기 위한 규칙이라고 할 수 있다.
제약 조건의 종류와 사용 시기
1. NOT NULL : 컬럼에 NULL 값을 허용하지 않는다.
데이터를 입력하지 않으면 에러가 발생하고, 아무것도 명시하지 않는 경우 default 값은 NULL 값을 허용한다.
- 사용 시기: 특정 컬럼이 항상 값을 가져야 하는 경우.
- 예시: 사용자 테이블의 이메일 주소 컬럼은 NULL이 될 수 없다.
email VARCHAR(100) NOT NULL
2. UNIQUE: 컬럼의 모든 값이 고유해야 한다. 즉, 중복되는 값을 비허용 한다.
똑같은 값이 있다면 에러가 발생하고, NULL 값은 비교가 불가능하여 중복되어도 에러가 발생하지 않는다.
- 사용 시기: 중복된 값을 허용하지 않으려는 경우.
- 예시: 사용자 테이블의 사용자 이름 컬럼은 고유해야 한다.
username VARCHAR(50) UNIQUE
3. DEFAULT: 컬럼의 기본값을 설정한다.
아무런 값을 지정하지 않으면 DEFAULT 값으로 설정된다.
- 사용 시기: 값이 명시적으로 입력되지 않을 때 기본값을 제공하려는 경우.
- 예시: 제품 재고는 기본값으로 0을 설정한다.
stock INT DEFAULT 0
4. CHECK (MySQL 8.0 이상 지원): 컬럼의 값이 특정 조건을 만족해야 한다.
값의 범위를 제한하여 특정 값만 허용하고 제한한 값이 아닌 경우 에러가 발생한다.
- 사용 시기: 특정 비즈니스 규칙을 컬럼에 적용하려는 경우.
- 예시: 직원의 나이는 18 이상이어야 한다.
age INT CHECK (age >= 18)
5. CONSTRAINT (제약 조건 정의): 제약조건의 이름과 함께 제약조건을 정의할 수 있다.
단, NOT NULL 과 DEFAULT는 CONSTRAINT로 정의 할 수 없다.
생성된 제약 조건 확인 : 'SELECT * FROM information_schema.table_constraints'
- 사용 시기: 제약 조건의 이름을 지정하면 나중에 해당 제약 조건을 쉽게 식별하고 수정하거나 삭제할 수 있다.
CREATE TABLE users (
id INT,
email VARCHAR(100),
CONSTRAINT uc_user_email UNIQUE (email)
);
6. 제약 조건 추가: CONSTRAINT로 만든 제약조건을 추가하는 방법이다.
--제약 조건 추가 : ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건이름 제약조건(속성)
ALTER TABLE customer
ADD CONSTRAINT address_unique UNIQUE (address);
-- DEFAULT 제약 조건 수정: ALTER TABLE 테이블명 ALTER 속성 SET DEFAULT 기본값
ALTER TABLE customer
ALTER address SET DEFAULT '주소 없음'
7. 제약 조건 삭제: CONSTRAINT로 만든 제약조건을 삭제하는 방법이다.
-- ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건이름
ALTER TABLE
container DROP CONSTRAINT customer_chk_2;
-- DEFAULT 제약 조건 삭제: ALTER TABLE 테이블명 ALTER 속성 DROP DEFAULT
ALTER TABLE customer
ALTER address DROP DEFAULT;
키 (Keys)
키는 데이터베이스 테이블에서 데이터를 고유하게 식별하거나 효율적으로 검색하기 위해 사용되는 컬럼 또는 컬럼의 집합이다. 키는 데이터베이스의 구조와 데이터 무결성을 유지하는 데 중요한 역할을 한다.
키는 조건에 만족하는 튜플을 찾거나, 정렬할 때 기준이 되는 속성이다.
키의 종류와 사용 시기
1. PRIMARY KEY(기본 키): 테이블 내에서 각 행을 고유하게 식별한다. 한 테이블에 하나만 존재할 수 있다.
서로 다른 튜플을 유일하게 식별할 수 있는 기준이 되는 속성이다. 중복되는 값을 가질 수 없고, NULL 값을 가질 수 없다.
테이블 당 1개만 설정할 수 있다.
- 사용 시기: 각 행을 고유하게 식별할 필요가 있는 경우.
- 예시: 사용자 테이블의 사용자 ID 컬럼
CREATE TABLE customer (
id VARCHAR(10) PRIMARY KEY,
name VARCHAR(10),
address VARCHAR(30)
);
2. FOREIGN KEY(외래키): 다른 테이블의 기본 키를 참조하여 테이블 간의 관계를 설정한다.
참조되는 테이블의 기본키에 없는 값은 지정할 수 없다.
- 사용 시기: 두 테이블 간의 참조 무결성을 유지하려는 경우.
- 예시: 주문 테이블의 사용자 ID는 사용자 테이블의 사용자 ID를 참조한다.
CREATE TABLE order_history (
customer_id VARCHAR(10),
order_id VARCHAR(14),
-- 외래키 설정: FOREIGN KEY (참조할 속성) REFERENCES 참조되는 테이블(참조되는 속성)
FOREIGN KEY (customer_id) REFERENCES customer(id),
CONSTRAINT order_history_pk PRIMARY KEY (customer_id, order_id)
);
3. CANDIDATE KEY(후보키): 후보키는 테이블에서 각 행을 고유하게 식별할 수 있는 하나 이상의 속성(컬럼)으로 구성된 키이다 .
테이블에서 고유성과 최소성을 만족하는 모든 키들을 후보키라고 한다.
하나의 테이블에는 여러 후보키가 존재할 수 있다.
CREATE TABLE students (
student_id INT,
ssn VARCHAR(11),
email VARCHAR(100),
name VARCHAR(100),
PRIMARY KEY (student_id)
);
이 예시에서 student_id, ssn, email은 모두 고유성과 최소성을 만족하므로 후보키가 될 수 있다.
4. ALTERNATE KEY(대체키): 대체키는 후보키 중에서 기본 키(Primary Key)로 선택되지 않은 키를 말한다.
테이블에서 기본 키로 선택되지 않은 후보키들은 모두 대체키로 간주된다.
CREATE TABLE students (
student_id INT PRIMARY KEY,
ssn VARCHAR(11) UNIQUE,
email VARCHAR(100) UNIQUE,
name VARCHAR(100)
);
이 예시에서 student_id가 기본 키로 선택되었기 때문에, ssn과 email은 대체키로 간주된다.
5. SUPER KEY(슈퍼키): 슈퍼키는 테이블 내에서 각 행을 고유하게 식별할 수 있는 하나 이상의 속성(컬럼)으로 구성된 키이다.
슈퍼키는 고유성을 만족하지만 최소성을 만족하지 않을 수도 있다.
모든 후보키와 기본 키는 슈퍼키에 포함된다.
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
ssn VARCHAR(11),
email VARCHAR(100),
name VARCHAR(100),
department_id INT
);
이 예시에서 employee_id는 슈퍼키이다.
employee_id와 email의 조합, ssn과 email의 조합 등도 슈퍼키가 될 수 있다.
무결성 제약 조건
- 개체 무결성: 기본키는 NULL 값과, 중복된 값을 가질 수 없다. (NOT NULL + UNIQUE)
- 참조 무결성: 외래키는 NULL 이거나 참조되는 RELATION의 기본키 값과 동일하다.
- 도메인 무결성: 특정 속성값은 그 속성이 정의된 도메인에 속한 값이어야 한다.
=> 주소에 서울시~, 경기도~ 는 되지만 뉴욕 은 안된다.
- NULL 무결성: 특정 속성값은 NULL 값을 가질 수 없다.
=> 반드시 받아야 하는 데이터는 반드시 NOT NULL 제약조건을 추가해야한다.
- 고유 무결성: 각 튜플이 가지는 속성값들은 서로 달라야 한다.
=> 하나의 테이블 안에서는 모든 튜플들이 절대 똑같은 데이터가 있어선 안된다. ( 기본키로 인해 지킬 수 있음 )
- 키 무결성: 테이블에 최소 한 개 이상의 키가 존재한다.
'데이터베이스 > MySQL' 카테고리의 다른 글
집계함수와 제어키워드 (0) | 2024.07.10 |
---|---|
구글 클라우드를 통한 MySQL 배포하기 (0) | 2024.07.09 |
정규화와 역정규화 그리고 이상현상, 함수의 종속성 (2) | 2024.07.09 |
데이터 모델링이란? (0) | 2024.07.09 |
SQL이란? 그리고 MySQL 기초 (0) | 2024.07.08 |