2011-10-19 4 views
0

두 번째 테이블의 항목 항목으로 다시 연결되는 외래 키 제약 조건이있는 열이있는 ItemComments 테이블이 있습니다. 두 번째 테이블의 각 항목은 많은 주석을 가질 수 있으므로 일대 다 관계로 간주되지만 두 개의 항목을 ItemComments 테이블의 동일한 주석 항목과 연결할 수 없으므로 다 대다 관계는 이해할 수 없습니다. 대다.외래 키에 대한 SQL Server 제약

문제 :

내가 실수로 특정 ItemComment 항목이와 연관된 항목 ID를 변경하지 못하도록 할 즉, 업데이트되지 외래 키 값을 방지 할이 칼럼에 제약 조건을 정의 할 . 나는 구속 조건 검사의 표현 형식에 익숙하지 않고 그러한 동작을위한 구문이 무엇인지 궁금해했다. 아니면이 작업을 수행하는 또 다른 직접적인 방법이 있습니까? 도와 주셔서 감사합니다.

UPDATE

은 당신이 다 대다 관계에서 이런 식으로 참조 무결성을 적용하는 것처럼 상호 참조 테이블을 구현하기 위해 더 나은가요? 또는 필요한 것보다 더 많은 오버 헤드를 추가하는 것입니까?

답변

1

항상 트리거를 사용할 수 있습니다. 뭔가 같이 :

create trigger dml_PreventUpdate 
on YourTable 
after update 
as 
    if UPDATE(ItemId) 
    rollback 

데이터 조작 언어의 두 가지 유형있다 (DML)를 트리거합니다. INSTEAD OF 다음에 AFTER/FOR 트리거 (AFTERFOR은 같은 방식으로 작동합니다)가 있습니다. 이름에서 알 수 있듯이 INSTEAD OF 트리거는 트랜잭션이 발생하기 전에 실행됩니다. 다시 AFTER 트리거는 이름에서 알 수 있듯이 트리거 된 동작 이후에 실행됩니다.

기본적 으로이 모든 트리거는 ItemId 열이 YourTable 테이블에 대해 실행 된 UPDATE 문에서 업데이트되는지 확인하기위한 테스트입니다. 이 트리거는 YourTable에 대해 UPDATE이있을 때마다 실행되지만 ItemId이 업데이트 된 필드 인 경우에만 ROLLBACK 트랜잭션입니다.

+0

안녕 상어, 나는 트리거를 사용하는 것에 익숙하지 않다는 것을 인정 하겠지만, 이것은 옵션처럼 들린다. 나는 그 주제에 대해 더 읽게 될 것이다. – kingrichard2005

+0

@ kingrichard2005 내 게시물을 편집하고 트리거에 대한 간단한 설명을 추가했으며 정확히 무엇이 일어나고 있는지를 설명했습니다. –

+1

알다시피, 트리거 같은 소리는 갈 길입니다. 나는 당신의 대답을 받아 들일 것입니다. 고마워 상어. – kingrichard2005

관련 문제