제약 조건

제약 조건을 사용하여 데이터베이스 엔진에서 자동으로 데이터베이스의 무결성을 보장하는 방법을 정의할 수 있습니다. 제약 조건은 무결성을 보장하기 위한 표준 메커니즘으로서 열에 허용되는 값과 관련된 규칙을 정의합니다. 제약 조건은 DML 트리거, 규칙기본값을 사용하는 것보다 선호됩니다. 또한 쿼리 최적화 프로그램은 제약 조건 정의를 사용하여 최대 성능 쿼리 실행 계획을 작성합니다.

제약 조건 클래스

SQL Server에서는 다음과 같은 제약 조건 클래스를 지원합니다.

  • NOT NULL은 열에서 NULL 값을 적용하지 않는다는 것을 나타냅니다. 자세한 내용은 Null 값 허용을 참조하십시오.

  • CHECK 제약 조건은 열에 들어갈 수 있는 값을 제한하여 도메인 무결성을 보장합니다. 자세한 내용은 CHECK 제약 조건을 참조하십시오.

    CHECK 제약 조건은 열에 입력되는 모든 값에 적용되는 부울(TRUE, FALSE 또는 알 수 없음으로 평가됨) 검색 조건을 지정합니다. FALSE로 평가되는 값은 모두 거부됩니다. 한 열에 여러 CHECK 제약 조건을 지정할 수 있습니다. 다음 예에서는 chk_id 제약 조건을 만드는 방법을 보여 줍니다. 이 제약 조건은 특정 범위의 숫자만 키 값으로 입력할 수 있도록 하여 기본 키의 범위를 추가 적용합니다.

    CREATE TABLE cust_sample
       (
       cust_id            int      PRIMARY KEY,
       cust_name         char(50),
       cust_address         char(50),
       cust_credit_limit   money,
       CONSTRAINT chk_id CHECK (cust_id BETWEEN 0 and 10000 )
       )
    
  • UNIQUE 제약 조건은 특정 열 집합에서 값의 고유성을 보장합니다.

    테이블에 있는 두 행은 UNIQUE 제약 조건이 지정된 열에서 같은 값을 가질 수 없습니다. 또한 기본 키에 고유성이 적용되며 고유 값의 하나로 NULL 값이 허용되지 않습니다. 자세한 내용은 UNIQUE 제약 조건을 참조하십시오.

  • PRIMARY KEY 제약 조건은 특정 열 또는 열 집합의 값으로 테이블에서 행을 고유하게 식별할 수 있도록 합니다. 자세한 내용은 PRIMARY KEY 제약 조건을 참조하십시오.

    테이블에 있는 두 행은 같은 기본 키 값을 가질 수 없습니다. 기본 키의 열에는 NULL 값을 입력할 수 없습니다. 작은 정수 열을 기본 키로 사용하는 것이 좋습니다. 각 테이블에는 기본 키가 있어야 합니다. 기본 키 값의 자격을 가진 열이나 열 집합을 후보 키라고 합니다.

    다음 예에서는 part_sample 테이블을 만들고 part_nmbr 필드를 기본 키로 지정합니다.

    CREATE TABLE part_sample
             (part_nmbr      int         PRIMARY KEY,
             part_name      char(30),
             part_weight      decimal(6,2),
             part_color      char(15) );
    
  • FOREIGN KEY 제약 조건은 테이블 간의 관계를 나타내며 해당 관계를 적용합니다. 자세한 내용은 FOREIGN KEY 제약 조건을 참조하십시오.

    한 테이블의 외래 키는 다른 테이블의 후보 키를 가리킵니다. 다음 예에서는 order_part 테이블이 이전에 정의된 part_sample 테이블을 참조하는 외래 키를 설정합니다.

    CREATE TABLE order_part
          (order_nmbr      int,
          part_nmbr      int
             FOREIGN KEY REFERENCES part_sample(part_nmbr)
                ON DELETE NO ACTION,
          qty_ordered      int);
    GO
    

    외래 키 값(NULL 제외)에 행을 삽입하려면 후보 키도 그 값을 가져야 합니다. ON DELETE 절은 기존의 외래 키가 가리키는 행을 삭제하려고 하는 경우 수행되는 동작을 제어합니다. ON DELETE 절은 다음의 옵션을 제공합니다.

    • NO ACTION은 삭제 작업이 오류를 나타내며 실패하도록 지정합니다.

    • CASCADE는 삭제된 행을 가리키는 외래 키를 포함하는 모든 행도 함께 삭제되도록 지정합니다.

    • SET NULL은 삭제된 행을 가리키는 외래 키를 포함하는 모든 행이 NULL로 설정되도록 지정합니다.

    • SET DEFAULT는 삭제된 행을 가리키는 외래 키를 포함하는 모든 행이 기본값으로 설정되도록 지정합니다. 자세한 내용은 기본값을 참조하십시오.

    ON UPDATE 절은 기존의 외래 키가 가리키는 후보 키 값을 업데이트하려고 하는 경우 수행되는 동작을 정의합니다. 이 절은 또한 NO ACTION, CASCADE, SET NULL 및 SET DEFAULT 옵션을 지원합니다.

열 및 테이블 제약 조건

제약 조건은 열 제약 조건 또는 테이블 제약 조건이 될 수 있습니다. 열 제약 조건은 열 정의의 일부로 지정하며 해당 열에만 적용됩니다. 이전 예에서의 제약 조건은 열 제약 조건입니다. 테이블 제약 조건은 열 정의와 별개로 지정되며, 테이블에 있는 하나 이상의 열에 적용할 수 있습니다. 테이블 제약 조건은 제약 조건에 하나 이상의 열을 포함해야 할 때 사용할 수 있습니다.

예를 들어, 테이블의 기본 키가 두 개 이상의 열로 구성되면 테이블 제약 조건을 사용하여 기본 키에 포함해야 합니다. 공장의 컴퓨터에서 발생하는 이벤트를 기록하는 테이블이 있다고 가정합니다. 여러 유형의 이벤트가 동시에 발생할 수 있지만 같은 유형의 두 이벤트가 동시에 발생할 수 없도록 해야 합니다. 이때 다음 예에서 볼 수 있듯이 event_type 열과 event_time 열을 두 개의 열 기본 키에 포함하여 테이블에서 이를 보장할 수 있습니다.

CREATE TABLE factory_process
   (event_type   int,
   event_time   datetime,
   event_site   char(50),
   event_desc   char(1024),
CONSTRAINT event_key PRIMARY KEY (event_type, event_time) )