메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

Integrity Constraints

noriwiki

상위 문서: SQL

개요

Integrity constraint는 승인된 사용자에 의해 데이터베이스에 적용된 갱신(update)에 의한 변경 데이터의 일관성(consistency)를 잃지 않도록 보장해준다. 즉, integrity constraint는 데이터베이스를 우발적인 손상으로부터 보호하는 역할을 한다.[1] Integrity constraint의 예는 다음과 같다:

  • 강사(instructor)의 이름은 null일 수 없다.
  • 두 명의 강사가 동일한 ID를 가질 수 없다.
  • course 릴레이션의 모든 학과(department) 이름은 department 릴레이션에 존재해야 한다.
  • 학과의 예산은 반드시 $0.00보다 커야 한다.

일반적으로 데이터베이스에 관련된 임의의 논리 조건(predicate)은 integrity constraint가 될 수 있다. 하지만 어떤 조건은 검사 비용이 높을 수 있기 때문에 대부분의 DBMS는 비용이 적게 드는(minimal overhead) constraint 만을 명시하도록 한다.
Integrity constraint는 보통 데이터베이스 스키마(schema) 설계 과정의 일부로 인식되며, create table 명령의 일부로 릴레이션을 생성할 때 선언된다. 또한 아래와 같이 기존 릴레이션에 integrity constraint를 추가할 수 있다.

alter table <table name> add <constraint> ...

Integrity constraint에는 primary key constraintforeign key constraint도 존재하지만 해당 문서에는 다른 종류의 constraint에 대해 알아본다.

Constraints on a Single Relation

create table 명령은 테이블을 정의하는 것 외에도 integrity constraint를 포함할 수 있다. 이때 primary key 외에도 다음과 같은 integrity constraint가 포함될 수 있다:

  • not null
  • unique
  • check(<조건>)

해당 문서에서는 위 constraint에 대해 설명한다.

Not null constraint

null 값은 모든 속성(atrribute)의 도메인에 포함되기 때문에 기본적으로 모든 속성에서 허용되지만 특정 속성에서는 null 값의 사용이 부적절하다. 에를 들어 student 릴레이션에서 name이 null인 튜플은 누군지 모르는 학생에 대한 정보를 담게 되므로 부적절하다다. 마찬가지로 학과의 예산(budget)이 null인 것도 바람직하지 않다. 이런 경우, 해당 속성에 null 값이 사용되는 것을 막기 위해 다음과 같이 create table 명령어를 작성할 수 있다.

name varchar(20) not null
budget numeric(12,2) not null

not null


각주

  1. 이는 무단 사용자의 접근을 막는 security constraint와는 대조적이다.