[TIL6] 끝부분에서 언급했던 '데이터 무결성'을 위한 5가지 제약조건을 알아보자.
제약조건 | 의미 |
---|---|
NOT NULL | 레코드가 없으면 안된다는 의미, 회원가입할 때, '필수 입력 사항'같은 것 |
UNIQUE | 유일한 레코드여야한다는 의미, 중복확인이 필수인 아이디 입력 사항에 필요한 것. |
PRIMARY KEY | 테이블 대표 컬럼, NOT NULL&UNIQUE 해야 함. |
FOREIGN KEY | '참조하는 테이블에서 존재하는 값만 사용 가능'을 의미. |
CHECK | 조건을 만족하는 값만 입력 가능하다는 의미. |
CREATE TABLE contact_info(
cont_id NUMERIC(3) NOT NULL,
name VARCHAR(15) NOT NULL
);
DROP TABLE IF EXISTS contact_info;
CREATE TABLE contact_info(
name VARCHAR(3) UNIQUE NOT NULL,
tel INTEGER NOT NULL,
tel INTEGER NOT NULL,
email VARCHAR
);
CREATE TABLE subject(
subj_id NUMERIC(5) PRIMARY KEY,
subj_name VARCHAR(20) NOT NULL,
stud_count NUMERIC(20) NOT NULL,
UNIQUE(subj_id, subj_name)
);
CREATE TABLE contact_info)
cont_id SERIAL PRIMARY KEY,
name VARCHAR(15) NOT NULL
);
CREATE TABLE teacher(
teac_id NUMERIC(5) PRIMARY KEY,
teac_name VARCHAR(20) NOT NULL,
subj_id NUMERIC(5) REFERENCES subject,
teac_certifi_date DATE
);
(1) 외래키 지정X,
UNIQUE에서 언급한 테이블 subject의 컬럼 subj_id를 참조한다고 한다면, 컬럼명이 같기 때문에 바로 'REFERENCES 테이블명'만 뒤에 붙이면 된다.
CREATE TABLE teacher(
teac_id NUMERIC(5) PRIMARY KEY,
teac_name VARCHAR(20) NOT NULL,
subj_code NUMERIC(5) NOT NULL,
subj_name VARCHAR(60) NOT NULL,
FOREIGN KEY (subj_code, subj_name) REFERENCES subject(subj_id, subj_name)
);
(2) 외래키 지정O
subj_code는 subj_id를 참조하는 것과 같이 순서대로 매핑된다.
자식 테이블 teacher에서 subj_id=2인 레코드가 삭제된다.
자식 테이블 teacher에서 subj_id=2였던 값이 NULL이 됐다.
자식 테이블 teacher에서 삭제한 레코드값이 DEFAULT값인 1로 바꼈다.
CHECK 명령어 뒤에 나오는 식이 BOOLION 타입의 TRUE를 만족해야한다.