티스토리 뷰
무결성 제약이란?
-데이터베이스에서 데이터의 일관성, 정확성, 유효성을 보장하기 위한 제약조건입니다.데이터가 의도하지않은 값이나 형식으로 입력되지 않도록 제한하고, 데이터간의 상호관계를 지켜줌으로써 데이터의 무결성을 유지합니다. 이 제약은 데이터베이스 시스템이 항상 만족하여야하는 조건이며 개체 무결성, 참조무결성으로 나뉜다.
개체 무결성 (단일 테이블 조건)
- NOT NULL
- 각 레코드는 필드 값이 NULL이 아니여야함. NULL이 입력될 시 오류를 반환합니다. (속성 하나만 적용가능) - PRIMARY KEY
-각 레코드는 필드 값이 NULL이 아니여야하며, 유일한 식별자를 가져야합니다. 즉 중복되는 값과 NULL값이 없어야하는 조건입니다. (다수의 속성 적용가능) - UNIQUE
- 각 레코드는 필드값이 유일한 식별자여야합니다. 즉 중복되는 값이 없어야하는 조건입니다.(다수의 속성 적용가능) (NULL값 가능) - CHECK
- 각 레코드가 특정 조건에 만족하여야 하는 조건입니다. check안에 조건이 들어갈 수 있고, 해당 조건에 맞는 레코드들만 입력이 될 수 있습니다.
개체 무결성 예시
Create table teaches (
PID char(5),
CID char(5),
semester varchar(10) not null,
year numeric(4,0) ,
classroom char(5) unique ,
primary key (PID,CID),
check (semester in ('Spring','Summer','Fall','Winter'))
);
참조 무결성 (다수 테이블 조건)
-하나의 테이블에서 다른 테이블의 값을 참조하는 외래키일 경우 외래키가 참조하는 값이 참조 테이블의 Primary key를 가지도록 보장하는것 이며, foreign key로 선언이 된다. (참조하는 대상의 데이터가 바뀌는 것만 해당됨)
(외래키는 NULL값 가능 , 참조 Primary key는 NULL값 불가능)
- CASCADE
-참조 무결성을 지키기위해 foreign key가 가리키고 있는 값이 변경이 되면 참조대상 값, 외래키 둘다 같은 값으로 변경 하는 조건 - SET NULL
-참조 무결성을 지키기위해 foreign key가 가리키고 있는 값이 변경이 되면 참조대상 값은 변경하고 외래키는 NULL로 설정하는 조건 (foreign key가 Primary key이면 NULL 값 안되기에 주의!) - SET DEFAULT
-참조 무결성을 지키기위해 foreign key가 가리키고 있는 값이 변경이 되면 참조대상 값은 변하고 외래키는 설정한 기본값으로 설정하는 조건 - Restrict
-외래 키를 참조하는 레코드가 존재하면 해당 테이블의 기본키 레코드의 삭제나 변경을 할 수 없는 조건입니다. - Dependent
-참조하려고하는 테이블에 PRIMARY KEY가 존재할때만 외래키 입력이 가능하고, 만약에 없으면 외래키 입력을 할 수 없는 조건입니다.
Create table teaches (
PID char(5),
CID char(5),
semester varchar(10) not null,
year numeric(4,0) ,
classroom char(5) unique ,
primary key (PID,CID),
foreign key(PID) references P, on delete cascade , on update cascade. // 삭제, 업데이트시 cascade
foreign key(CID) references teaches; // 자기자신 참조
);
initially deferred
-무결성 제약 조건을 연기하도록 지정하는 방법. 이설정을 하면 테이블에 데이터가 추가될때 무결성 제약조건을 체크하지 않고 나중으로 연기시킵니다. 무결성 제약조건을 해제하여 데이터의 무결성이 깨질 수 있어 주의해야합니다.
Assertion(주장)문
- 위에서 본 무결성 제약 외에 사용자가 정의해 데이터베이스에서 무결성을 강제하기 위한 조건을 지정하는 객체. 즉, 데이터를 테이블에 추가,삭제,변경 등의 연산을 진행 할때마다 특정조건에 일치하는지 확인하는 연산입니다. 만약 조건이 어긋나는경우 에러를 발생시키며, 이 연산은 데이터가 변경될때마다 전체 테이블을 검사하기때문에 자원이 많이 소요되는 연산입니다.
CREATE ASSERTION age_check
CHECK (SELECT COUNT(*) FROM users WHERE age < 0) = 0;
'DB' 카테고리의 다른 글
데이터베이스 권한(grant,revoke) (0) | 2023.05.05 |
---|---|
트리거(Triggers) (0) | 2023.05.04 |
데이터베이스 뷰(VIEW) (0) | 2023.05.03 |
SELECT 기본구조 (0) | 2023.04.21 |
SQL 언어 종류 (DML , DDL, DCL) (0) | 2023.03.27 |