데이터를 저장하는 데 있어서 데이터베이스는 일관성을 유지하고, 중복을 제거하는 등 데이터의 신뢰도를 유지해야 한다. 따라서 데이터의 삽입, 삭제, 수정 시 여러 가지 제약조건이 따른다.
※ 제약조건의 정리
구분 | 도메인 | 키 | |
도메인 무결성 제약조건 | 개체 무결성 제약조건 | 참조 무결성 제약조건 | |
제약 대상 | 속성 | 튜플 | 속성과 튜플 |
같은 용어 | 도메인 제약 (domain constraint) |
기본키 제약 (primary key constraint) |
외래키 제약 (foreign key constraint) |
해당되는 키 | - | 기본키 | 외래키 |
NULL 값 | 허용 | 불가 | 허용 |
릴레이션 내 제약조건의 개수 |
속성의 개수와 동일 | 1개 | 0~여러 개 |
기타 | 튜플 삽입/수정 시 제약사항 우선 확인 |
튜플 삽입/수정 시 제약사항 우선 확인 |
튜플 삽입/수정 시 제약사항 우선 확인 부모 릴레이션의 튜플 삽입/수정 시 제약사항 우선 확인 |
무결성 제약조건 : 결점 없는 데이터를 위한 제약조건을 설정할 수 있다
1. UNIQUE : 중복안됨
2. NOT NULL : null포함 안됨
3. PRIMARY KEY : unique + not null
4. CHECK : 특정값만 포함(ex.0보다 커야한다/1~5 사이만 넣어야한다)
5. FOREGIN KEY : 부모엔티티의 PK를 참조 (부모엔티티의 컬럼값만 참조할 수 있고, 다른 값 넣을 수 없다)
모든 컬럼에 제약조건 다 안해도 된다. 필요에 따라서만 하면 됨
CREATE TABLE t_b(
id varchar2(5), --아이디 값이 저장 PRIMARY KEY
pwd varchar2(5), --비밀번호 NOT NULL
name varchar2(30), --이름
email varchar2(30), --이메일 UNIQUE
status number(1) --상태 -1:탈퇴, 0:휴면, 1:활동중인 상태 CHECK
)
id1 | p1 | n1 | id1@a.com | 1 |
id2 | p2 | n2 | id2@a.com | 1 |
id3 | p3 | ' ' | id3@a.com | 1 |
id4 | p3 | n2 | ' ' | -1 |
이 릴레이션에서 행을 구분해주는 식별자 컬럼은?
후보키 : id, email
기본키 : 그 중에서 최종선정된 id값
기본키에 해당하는 컬럼에는 PRIMARY KEY 제약조건 설정
이메일 null이 들어가도 되지만 중복되지 않게 = UNIQUE 제약조건 설정
1)제약조건설정방법
(1) 테이블레벨 제약조건 설정하기
테이블에 필요한 컬럼을 다 만들고 제약조건만 따로 나열
CREATE TABLE t_b(
id varchar2(5),
pwd varchar2(5),
email varchar2(30),
status number(1),
CONSTRAINT t_b_id_pk PRIMARY KEY(id),
--t_b_id_pk : 제약조건 이름부여(테이블명+컬럼명+제약조건 종류)
CONSTRAINT t_b_email_uq UNIQUE(email),
CONSTRAINT t_b_status_ck CHECK(status IN (-1, 0, 1))
);
(2) 컬럼레벨 제약조건 설정하기 : NOT NULL 제약조건은 반드시 컬럼레벨로만 제약조건 설정해야 한다.
CREATE TABLE t_b(
id varchar2(5) CONSTRAINT t_b_id_pk PRIMARY KEY,
pwd varchar2(5) (CONSTRAINT t_b_pwd_nn) NOT NULL, -- 저 부분 생략 가능
email varchar2(30) CONSTRAINT t_b_email_uq UNIQUE
status number(1) CONSTRAINT t_b_status_ck CHECK(status IN (-1, 0, 1))
);
(3) 이미 테이블이 생성되어 있는 경우(데이터도 있는 경우) 테이블 구조변경으로 제약조건 추가한다
CREATE TABLE t_b(
id varchar2(5),
pwd varchar2(5),
email varchar2(30),
status number(1)
); -- 이미 만들어져있음
--테이블레벨 제약조건을 추가하는 것일뿐이다.
ALTER TABLE t_b
ADD CONSTRAINT t_b_id_pk PRIMARY KEY(id);
ALTER TABLE t_b
ADD CONSTRAINT t_b_email_uq UNIQUE(email)
ADD CONSTRAINT t_b_status_ck CHECK(status IN (-1, 0, 1));
ALTER TABLE t_b
MODIFY pwd NOT NULL; --테이블 레벨로 설정못한다, 컬럼을 변경하면서 제약조건을 설정
테이블레벨 제약조건을 권장한다.
'데이터베이스 > Oracle' 카테고리의 다른 글
무결성 제약조건 예제 (0) | 2023.08.22 |
---|---|
스키마 (0) | 2023.08.22 |
데이터 제어 언어 (0) | 2023.08.22 |
서브쿼리 예제 (0) | 2023.08.22 |
서브쿼리(SubQuery) (2) (0) | 2023.08.22 |