무결성 제약조건
데이터 베이스의 완전성을 높이기 위해서 데이터 베이스 관리 시스템(DBMS)이 체크하는 데이터의 조건.
데이터 베이스에서 인출되는 데이터는 DBMS가 체크하는 일정한 범위 내에서만 바르다. DBMS가 체크의 정도를 강하게 하면 그만큼 데이터의 정확함, 즉 완전성은 높아진다.
쉽게 말해서, 권한이 부여된 계정이나 사람만이 접근 가능하고, 정확하고 완전한 데이터들이 저장되어 있는 상태라고 생각하면 된다. 여기서 제약조건은 이러한 데이터 무결성을 보장함으로써 이상한 데이터가 저장되지 않도록 하는 기능을 제공한다.
제약조건
컬럼에 대한 속성 형태로 정의하지만 엄연히 오라클 데이터베이스 객체 중 하나이며 데이터의 무결성을 보장하기 위한 용도로 사용된다.
데이터의 무결성을 위해서 데이터베이스에서는 5가지 제약조건을 제공한다.
1. NOT NULL
NOT NULL은 데이터입력(INSERT)시에 누락이 되어서는 안되는 부분이다. NULL값을 허용하지 않는다.
2. UNIQUE
해당 테이블에 있어서 존재하는 값이 유일해야 한다. 만약 INSERT나 UPDATE시에 제약이 걸려있는 컬럼에 동일한 데이터가 존재한다면 오류가 난다. 이 때, NULL값에 대해서는 UNIQUE제약이 적용되지 않는다. 즉, NULL값은 데이터로 인식하지 않기 때문에 해당 컬럼에 NULL데이터행이 여러개가 동시에 존재하는 것이 가능하다.
테이블을 만들 때 제일 뒤에 CONSTRAINTS 제약명 UNIQUE(컬럼1, 컬럼2...)와 같이 CONSTRAINTS의 이름을 지정하는 것이 가능하다. UNIQUE 제약으로 들어가는 컬럼들은 그것들의 조합이 유일해야 한다. 쉽게 말하면 데이터의 유일함이 아니라 조합이 유일해야 한다.
서로 다른 컬럼에 동일한 데이터가 있다 하더라도 각 컬럼의 데이터들의 조합이 다르면 오류를 일으키지 않는다.
3. PRIMARY KEY
하나의 테이블에 있는 데이터들을 식별하기 위한 기준으로 인식되는 제약조건. 한개의 테이블에 하나만 생성이 가능하다. PRIMARY KEY는 NOT NULL + UNIQUE의 속성을 가진다. 즉, NULL 값이 있으면 안되고 해당 컬럼의 데이터가 중복되지 않고 유일해야 한다. UNIQUE에서와 같이 여러 컬럼들을 조합해서 지정할 수 있다.
4. FOREIGN KEY
해당 컬럼에 참조하는 테이블로부터 존재하는 값들만 사용한다는 의미의 제약조건. 만일 참조하는 테이블에 해당하는 값이 없을시에는 INSERT나 UPDATE시에 오류가 나게 된다. 외래키는 여러개의 컬럼에 중복 적용이 가능하다. 외래키로 두 테이블이 부모테이블과 자식테이블로 관계를 맺고 있을시에, 자식테이블이 참조하는 데이터는 부모 테이블에서 삭제가 불가능하다 (외래키의 디폴트 옵션일 때). 외래키는 4가지 옵션을 가지고 있는데 이 옵션에 따라 부모테이블에서 삭제할 때, 자식테이블에서 참조하는 데이터도 삭제가 되도록 만들 수 있다. 따라서 외래키를 사용한 테이블을 삭제할 때는 제약조건에 어긋나지 않게 순서대로 삭제해야 삭제가 된다.
-- 외래키의 옵션--
NO ACTION : 데이터베이스 엔진에서는 오류가 발생하며 부모 테이블의 행에 대한 삭제 또는 업데이트 동작이 롤백 된다.
CASCADE : 부모 테이블에서 해당 행이 업데이트 되거나 삭제될 때, 참조 테이블에서도 해당 행이 업데이트 또는 삭제 된다. timestamp 유형의 열이 외래키 또는 참조되는 키의 일부인 경우에는 CASCADE를 지정할 수 없다.
SET NULL : 부모 테이블에서 행을 업데이트하거나 삭제하면 해당 외래키를 구성하는 모든 값이 NULL로 설정된다. 이 제약 조건을 실행하려면 외래키 열이 NULL을 허용해야 한다.
SET DEFAULT : 부모 테이블에서 해당 행을 업데이트 하거나 삭제하면 외래키를 구성하는 모든 값이 기본값(Default로 지정한 값)으로 설정된다. 이 제약 조건을 실행하려면 모든 외래키 열에 기본 정의가 있어야 한다. 열이 NULL을 허용하고 명시적 기본값이 설정되어 있지 않은 경우 NULL은 해당 열의 암시적 기본값이 된다.
RESTRICT : 자식테이블에 데이터가 남아있는 경우 부모 테이블의 데이터는 수정 또는 삭제를 할 수 없다.
5. CHECK
조건에 부합하는 데이터만 입력이 가능하도록 하는 제약조건. 조건에는 기본연산자나 비교연산자, IN, NOT IN 등을 사용할 수 있다.
'Programming > DataBase' 카테고리의 다른 글
[DataBase] 기본 SQL문 정리2 (0) | 2018.04.18 |
---|---|
[DataBase] PL / SQL 개념 (0) | 2018.04.18 |
[DataBase] 제약 조건 확인하기 (데이터 딕셔너리 활용) (2) | 2018.04.17 |
[DataBase] 데이터 딕셔너리 (1) | 2018.04.17 |
[DataBase] 기본 SQL문 정리 (1) | 2018.04.17 |