정보 처리/데이터베이스

무결성 제약 - 데이터 무결성 제약(data integrity)

본클라쓰 2008. 12. 18. 08:48

 

데이터 무결성 제약(Integrity Constraints)

 

데이터 무결성 제약조건이란 테이블(릴레이션)에 원치 않은 데이터를 입력/수정/삭제하지 못하게 제약하는 것으로, 사용자에 의해 발생할 수 있는 잘못된 데이터 조작이 실행되지 않게 합니다. 이는 데이터의 정확성과 유효성을 유지하는 것을 의미하며 데이터베이스를 정확하고 일관된 상태로 머물 수 있도록 지정된 연산만 사용자가 수행할 수 있도록 제한합니다. 따라서 무결성 제약 조건은 데이터의 정확성을 유지하기 위한 규칙이며 데이터베이스 안에 모든 데이터는 무결성 제약 조건을 지켜야 합니다.

 

DBMS는 데이터베이스가 데이터가 갱신될 때 자동적으로 무결성 검사를 실시하며 응용 프로그램이나 사용자는 무결성 조건을 검사할 필요가 없습니다. 또한, 지정한 제약조건에 대한 모든 정보를 시스템 카탈로그에 저장되며, 원할 때 언제든지 기능을 활성화/비활성화 할 수 있습니다. 테이블의 하나의 컬럼에 여러 개의 제약조건을 설정할 수 있으며, 무결성 제약조건은 다음의 6가지가 있습니다.

 

PRIMARY KEY

 

실체 무결성 또는 개체 무결성이라 부릅니다. 기본 키 제약조건은 널 값과 중복된 값을 한 테이블에서 가질 수 없음을 나타냅니다. 기본 키는 데이블 간의 관계를 정의하기 위해 테이블 내에서 유일한 값을 가져야 하며, 널 값도 가져서는 안 됩니다. 즉, 중복과 널 값을 가질 수 없는 제약조건입니다. (참고: 널 값이란 아직 알려지지 않은 값으로 정보의 부재를 뜻하며 널 값이라고 데이터 공간이 없는 것이 아니라 1byte의 공간을 차지합니다.)

 

FOREIGN KEY

 

참조 무결성 또는 외래 키 제약조건이라 부릅니다. 외래 키 제약조건은 두 테이블 간의 관계를 선언함으로써, 데이터의 무결성을 보장해주는 역할을 합니다. 외래 키 관계를 설정하게 되면 하나의 테이블이 다른 테이블에 의존하게 됩니다. 이는 참조하는 테이블의 기본 키의 값과 외래 키의 값이 일치해야 되며, 기본키와 외래키는 테이블 간의 관계를 나타냅니다. 테이블 관계는 일대일, 일대다, 다대다 관계가 있습니다.

 

CHECK 무결성

 

CHECK 제약조건은 입력되는 데이터를 점검하는 기능을 수행합니다. 컬럼에 입력되는 값 들의 조건을 검사하여 해당 조건의 값만 입력될 수 있도록 제약하는 무결성입니다. 이는 컬럼에 사용되는 값은 정의된 데이터 타입과 일치해야 하는 무결성의 발전형입니다. 따라서 미리 정의되어 있는 데이터 타입을 벗어난 값을 컬럼에 사용할 수 없습니다.

 

UNIQUE 제약조건

 

테이블내의 컬럼에서 기본키가 아니더라도 컬럼의 모든 값이 유일해야 하는 경우 Unique key로 지정해 유일한 값이 저장될 수 있도록 제한하는 제약입니다.

 

Not Null 제약조건

 

속성은 기본(Default) 값으로 널 값을 가질 수 있기 때문에 어떠한 속성에 널 값을 허용하지 않으려면 'not null' 제약을 명시해야 합니다. not null 제약조건은 기본키는 반드시 명시되어야 합니다. 또한 필요한 속성에 not null 제약을 부여할 수도 있습니다.

 

Default 제약 조건

 

디폴트 제약조건은 컬럼에 아무런 값을 입력하지 않으면 기본적으로 입력되는 값을 지정할 때 사용하는 제약 조건입니다. 이는 널 값 대신 특정 값을 기본적으로 지정할 때 사용하는 방법으로 디폴트 제약조건이 걸려 있는 컬럼에 값을 입력하지 않으며 자동으로 지정한 값이 채워집니다.

 

  

 

참조 무결성(외래 키 무결성)을 만족시키기 위한 DBMS 처리 방법

 

데이터베이스에 대한 갱신(데이터의 삽입, 수정, 삭제) 연산이 일어날 때는 무결성 제약 조건을 유지해야 합니다. 이런 무결성을 유지하기 위해 DBMS는 무결성 제약조건들을 만족하도록 필요한 조치를 수행합니다. 이는 참조 무결성에도 적용되는데 기본 키와 외래 키로 연결된 테이블 간의 데이터 갱신에 무결성을 유지시킵니다. 즉, DBMS에서 기본 키와 외래 키로 연결된 테이블 간에 데이터가 갱신될 때 참조 무결성 제약조건이 위배되지 않도록 무결성 제약조건을 부여할 수 있습니다. 이 때 부여할 수 있는 제약조건은 다음과 같다.

  1. 제한(Restructed)
  2. 연쇄(Cascade)
  3. 널값(Nullify)

참조 무결성을 사용하기 위해서는 우선 테이블 간의 관계 형성을 실시해야 합니다. 이는 관계형성은 테이블을 부모-자식으로 연관시켜 기본 키와 외래 키로 테이블을 연결시키는 것입니다. 이 연결된 테이블에 데이터가 갱신될 때는 무결성 조건이 만족되어야 갱신 연산이 수행되게 됩니다. 제한과 널값은 기본적인 제약조건이기 때문에 다른 설명이 필요 없습니다.

 하지만 테이블 간 데이터 갱신이 연쇄(Cascade)는 대표적인 관계 연산으로 다음과 같은 제약을 부여할 수 있습니다.

  • Update Cascade: 부모 테이블의 데이터를 수정할 때 이를 참조하는 자식 테이블의 데이터도 함께 수정
  • Delete Cascade: 부모 테이블의 데이터를 삭젤할 때 이를 참조하는 자식 테이블의 데이터도 함께 삭제

제한과 널값과 같은 무결성 제약에 걸릴 경우 DBMS는 연산을 거부하며, 연쇄의 경우에는 참조되는 릴레이션의 튜플을 삭제하고 참조하는 릴레이션에서도 튜플들도 함께 삭제합니다. 이는 삭제만 할 수 있는 것이 아니라 Null 값으로 대체할 수도 있습니다. 이는 DBMS가 수정할 때 수정하는 애트리뷰트가 기본 키인지 외래 키인지 먼저 검사를 수행하기 때문에 가능한 것입니다. 만약, 수정하려는 애트리뷰트가 기본키도 아니고 외래키도 아니면 수정 연산이 참조 무결성 제약조건을 위해하지 않습니다.

 

기본키나 외래키를 수정하는 것은 하나의 튜플을 삭제하고 새로운 트플을 그 자리에 삽입하는 것과 유사하므로, 삽입과 삭제에서 설명한 제한, 연쇄, 널값 규칙이 수정 연산에 적용됩니다.