2013-03-09 3 views
-1

SQL의 참조 데이터 무결성에 대한 작업을하고 있습니다.참조 데이터 무결성

나는 세 테이블 이름이 branch1, branch2branch3 인 시나리오를 만들고 싶습니다. Branch2Branch3branch1 외래 키가있는 테이블과 조인됩니다. 내가 branch1 표에 '활성'삽입하면

는 지금은 branch1 테이블에 시스템을 만들려는 테이블에 삽입하고 내가 다른 두 테이블이 branch1 표에 '비활성'삽입 할 때 뜻에 의지 할 수 branch2branch3 테이블 테이블에 어떤 것도 삽입 할 수 없습니다.

이 모든 것이 참조 데이터 무결성으로 만들고 싶습니다.

그래서 내가 시도 제발 도와주세요하지만 난 성공

+1

설명하는 내용은 참조 무결성과 관련이 없습니다 (적어도 외래 키의 실제 작동 방식과 관련이 없음). 이것은 응용 프로그램의 의미를 설명하는 것입니다. – Oded

+0

나는 캐스케이드 업데이트 및 삭제에 대해 이야기하고 있으며,이 캐스케이드 업데이트 및 삭제로이 작업을 수행 할 수 있습니다. – Mufasil

+0

이 질문에 대한 명확한 질문이 없습니다. 다음 진술은 무엇을 의미합니까? '.. 다른 2 개의 테이블은 테이블에 어떤 것도 삽입 할 수 없습니다. '테이블은 다른 테이블에 삽입되지 않습니다. 다른 두 테이블은 읽기 전용이됩니까? – Tim

답변

1

트리거를 사용할 수 있습니다.

BRANCH2BRANCH3의 트리거를 사용하여 BRANCH1 테이블에서 ACTIVE을 확인하십시오. 존재하면 삽입을 계속할 수 있고 그렇지 않으면 삽입을 취소 할 수 있습니다.

구문에 대해서는 MSDN Create Trigger doco를 참조하십시오.

가 여기에 내가 빨리 구글을 볼 수있는 튜토리얼입니다 : An Intro to SQL Triggers @ SQL Team


당신은 또한, 트리거이 너무 사용할 수 있습니다 참조 무결성을 제어해야하는 경우 - 부모 레코드가 하나 개의 테이블에서 삭제되면 예를, 해당 테이블의 트리거는 제약 조건이 삭제를 차단하지 않도록 다른 테이블에서 자식 레코드를 먼저 삭제할 수 있습니다.

그러나 실제 부모/자녀 관계가 귀하의 질문에 설명되어 있으므로 참조 무결성이 어떻게 적용되는지 볼 수 없습니다.

+0

OK 그렇지만 CASCADE 참조 무결성을 사용하여 수행 할 작업 – Mufasil

+1

@Mufasil 질문에서 설명한 내용은 계단식 참조 무결성과는 아무 관련이 없습니다. 당신의 질문은'BRANCH1'에있는 값들을 기반으로'BRANCH2'와'BRANCH3'에 인서트를 제어하는 ​​것을 설명합니다. – Sepster

+0

괜찮아요.하지만 다른 누군가가 나에게 계단식 참조 무결성과 관련 있다고 말합니다. 그걸 할 수 있다고 말해 주실 수 있습니까? – Mufasil

0

테이블이 다른 테이블에 데이터를 삽입하지 마십시오하지 않았다. 쿼리가 수행합니다. 언제든지 쿼리에 'where'절을 추가하여 업데이트를 조건부로 만들 수 있습니다.

+0

예, 정확히 내가 원하는 경우 이러한 세 테이블을 나는 branch1 테이블에 쿼리에 의해 '활성'삽입 다음 삽입 다른 2 테이블에 삽입 할 branch1 테이블에서 캐스케이드 방법을 만들고 싶습니다. 수행하지 않는다. – Mufasil