Learn business/Database

무결성 제약조건 정리


무결성 제약조건

데이터 모델은 데이터베이스 구조를 기술하는 데 사용되는 구성요소들의 집합으로 구조(데이터 타입, 관계), 그 구조 위에서 동작하는 연산자, 무결정 제약조건으로 이루어진다.

데이터 무결성은 데이터의 정확도 또는 유효성을 의미한다.

무결성 제약조건은 일관된 데이터베이스 상태를 정의하는 규칙들을 묵시적 또는 명시적으로 정의하는 것이다. 쉽게 말해서 데이터베이스 상태를 만족시켜야하는 조건이고, 사용자에 의한 데이터베이스 갱신이 데이터베이스의 일관성을 깨지 않도록 보장하는 수단이다.

프로그래밍 언어에서의 규칙은 서로 다른 데이터 타입의 데이터를 비교하거나 어떤 데이터 타입의 변수에 다른 데이터 타입의 변수를 배정하는 등의 작업을 제한한다. 이는 상용자가 일반적으로 무의미한 작업을 하지 못하도록 하기 위한 것이다. DBMS에서 무결성 제약조건은 위와 같은 역할을 한다.

 

데이터베이스 보안데이터베이스 무결성 차이

- 데이터베이스 보안: 권한이 없는 사용자가 데이터베이스를 접근하여 검색하거나 갱신하지 못하도록 데이터베이스를 보호하는 것

- 데이터베이스 무결성: 권한을 갖은 사용자로부터 데이터베이스의 정확성을 지키는 것

 

무결성 제약조건의 장점

- 스키마를 정의할 때 일관성 조건을 오직 한 번만 명시하고, 데이터베이스가 갱신될 때 DBMS가 자동적으로 일관성 조건을 검사하므로 응용 프로그램들은 일관성 조건을 검사할 필요가 없다.

예를 들어, DBMS의 무결성 제약조건으로 은행의 고객 릴레이션 잔고(balance) >= 0이라는 무결성 제약조건을 정의하면, 응용 프로그래머들은 잔고가 0보다 작아지는 경우를 검사하는 문장을 프로그램에 나타낼 필요가 없다.

무결성 제약조건의 단점

- 프로그래밍 작업이 훨씬 복잡해지고, 무결성 제약조건을 반복해서 구현해야 하고, 무결성 제약조건들 간에 서로 충돌이 발생할 수 있다. 그러나 DBMS가 무결성 제약조건을 시행하면 저장된 데이터가 실세계의 의미를 좀더 충실하게 따르게 된다. 또한 응용 프로그램의 논리로 무결성 제약조건을 유지하는 경우보다 에러의 발생 여지가 크게 감소된다.

 

제약조건의 종류

1. 도메인 제약조건(Domain Constraint)

각 애트리뷰트 값이 반드시 원자값이어야 하며

데이터 형식을 통해 값들의 유형(정수형, 실수형, 문자형 등)을 제한하고,

애트리뷰트의 디폴트 값을 지정하고,

애트리뷰트에 저장되는 값들의 범위를 제한할 수 있다.

릴레이션을 정의할 때 애트리뷰트 선언에 “NOT NULL” 구문을 붙이면 모든 투플에서 해당 애트리뷰트의 값이 존재하도록 보장한다.

 

2. 키 제약조건(Key Constraint)

키 제약조건은 애트리뷰트에 중복된 값이 존재해서는 안 된다는 것이다.

릴레이션을 정의할 때 기본 키로 정의하거나 UNIQUE를 명시한 애트리뷰트는 중복된 값이 허용되지 않는다.

 

3. 기본 키와 엔티티 무결성 제약조건(Entity Integrity Constraint)

기본 키는 투플들을 고유하게 식별하고, 효율적으로 빠르게 접근하는 데 사용된다. 두 개 이상의 투플이 동일한 기본 키 값을 갖을 수 없다.

엔티티 무결성 제약조건은 릴레이션의 기본 키를 구성하는 어떤 애트리뷰트도 널값을 가질 수 없다는 것이다. 왜냐하면, 기본 키를 구성하는 애트리뷰트가 널값을 가지면 투플들을 고유하게 식별할 수 없게 되기 때문이다.


4. 외래 키와 참조 무결성 제약조건(Referential Integrity Constraint)

외래 키는 외부 릴레이션의 기본 키 애트리뷰트를 참조하는 키이다.

참조 무결성 제약조건은 두 릴레이션의 연관된 투플들 사이의 일관성을 유지하는데 사용된다.

참조 무결성 제약 조건은 다음 두 조건 중 하나가 성립하면 만족된다.

(1) 외래 키의 값은 참조 릴레이션의 어떤 투플의 기본 값과 같다.

(2) 외래 키가 자신을 포함하고 있는 릴레이션의 기본 키를 구성하고 있지 않으면 널값을 가진다.


              [EMPLOYEE]                                                  [DEPARTMENT]

 

위 그림에서 EMPLOYEE 릴레이션의 ENO 애트리뷰트는 DEPARTMENT 릴레이션의 기본 키인 DEPTNO를 참조하는 외래 키이다.

참조 무결성 제약조건에 따라서 ENO의 값은 DEPTNO에 나타나는 값만 나타낼 수 있다.

또는 ENO는 기본 키의 구성요가 아니므로 널값을 가질 수 있다. [위조건 중 (2)에 해당]

신입 사원을 채용하고 아직 어떤 부서에 발령을 내지 않앗다 하더라고 이 신입 사원에 관한 정보를 EMPLOYEE 릴레이션에 삽입하기 위해서는 사월 투플의 부서번호에 잠정적으로 널값을 지정할 수 있다.

만약 DBMS가 참조 무결성 제약조건을 제공하지 않는다면 EMPLOYEE릴레이션에 사원 투플을 삽입할 때, 존재하지 않는 부서에 근무하는 경우가 발생할 수 있다.

'Learn business > Database' 카테고리의 다른 글

데이터 정의어  (0) 2017.03.26
SQL 개요  (0) 2017.03.25
식별관계와 비식별관계  (0) 2017.03.24
릴레이션 키 총 정리  (0) 2017.03.23
ANSI/SPARC 3단계  (0) 2017.03.23