트리거와 제약 조건 비교
제약 조건과 DML 트리거는 각각 특수한 상황에서 유용하게 사용할 수 있는 장점을 가지고 있습니다. DML 트리거의 주요 장점은 Transact-SQL 코드를 사용하는 복잡한 처리 논리를 사용할 수 있다는 점입니다. 따라서 DML 트리거는 제약 조건의 모든 기능을 제공할 수 있습니다. 그러나 DML 트리거가 항상 특정 기능을 수행하는 최상의 방법은 아닙니다.
PRIMARY KEY 및 UNIQUE 제약 조건의 일부가 되거나 제약 조건과 상관없이 생성되는 인덱스는 가장 낮은 수준에서 항상 엔티티 무결성이 강제 적용되어야 합니다. 도메인 무결성은 CHECK 제약 조건을 통해 강제 적용되어야 합니다. 또한 참조 무결성(RI)은 FOREIGN KEY 제약 조건을 통해 강제 적용되어야 하며 이때 제약 조건의 기능이 응용 프로그램의 기능 요구 사항을 충족한다고 가정합니다.
DML 트리거는 제약 조건에서 지원하는 기능이 응용 프로그램에서 필요한 기능을 수행하지 못할 때 가장 유용합니다. 예를 들면 다음과 같습니다.
REFERENCES 절이 연계 참조 동작을 정의하지 않으면 FOREIGN KEY 제약 조건은 다른 열의 값과 정확히 일치하는 열 값에 대해서만 유효성을 검사할 수 있습니다.
제약 조건은 표준화된 시스템 오류 메시지를 통해서만 오류를 알립니다. 응용 프로그램에서 사용자 지정 메시지와 더 복잡한 오류 처리가 필요하면 트리거를 사용해야 합니다.
DML 트리거는 데이터베이스의 관련 테이블을 통해 변경 내용을 연계할 수 있습니다. 그러나 연계 참조 무결성 제약 조건을 사용하면 더 효율적으로 변경할 수 있습니다.
DML 트리거는 참조 무결성을 위반하는 변경 내용을 적용하지 않거나 롤백하여 데이터 수정을 취소할 수 있습니다. 이 트리거는 외래 키를 변경했는데 새 값이 기본 키와 일치하지 않을 때 적용됩니다. 그러나 이 작업에는 일반적으로 FOREIGN KEY 제약 조건을 사용합니다.
트리거 테이블에 제약 조건이 있으면 INSTEAD OF 트리거가 실행된 후 AFTER 트리거가 실행되기 전에 제약 조건이 확인됩니다. 제약 조건을 위반하면 INSTEAD OF 트리거 동작이 롤백되고 AFTER 트리거가 실행되지 않습니다.