2012-10-24 5 views
0

enter image description here이 스키마 디자인에서 참조 무결성이 있습니까?

나는 내가 VersionsVersionQuestions 테이블을 포함하는 데이터 무결성 문제가 우려입니다. 예를 들어 DefMasterID 테이블이 Versions 테이블에서 변경되면 다른 마스터 정의를 가리 키지 만 Questions의 하위 레코드는 원래 측량 마스터에 속한 MasterQuestionsPool의 레코드를 계속 가리 킵니다. 이상적으로, 제약은 이것을 막을 것이지만 나는 그렇게 할 것이라고 생각하지 않는다.

이 디자인에는 무결성이 있습니까? 그렇지 않은 경우 무결성을 보장하기 위해 취할 수있는 적절한 경로는 무엇입니까?

위의 스키마는 이러한 요구 사항을 기반으로합니다

  1. 크게 다른 설문 조사를 대표하는 여러 설문 조사의 마스터 정의가있을 필요가있다.

  2. 마스터 조사 정의에는 최소한의 차이를 나타내는 하나 이상의 버전이 필요합니다.

  3. 각 설문 마스터에는 해당 버전간에 공유되는 일련의 질문이 있습니다. 개별 버전은 일반적으로 모든 질문을 사용하지는 않습니다. 이를 통해 측량 마스터의 모든 버전에서 응답을 비교할 수 있습니다.

답변

0

나는 당신이 염려 할 만하다고 생각합니다.

하나의 접근법은 주어진 풀 내에서 고유 한 MasterQuestionsPool에 식별자 (MasterQuestionInstanceLabel과 같은 이름)를 추가하는 것입니다 (풀 전체에 걸쳐 반드시 필요하지는 않음). 즉, 질문 1과 마스터 1의 페어링은 질문 "A"(마스터 1)로 표시 될 수 있지만 마스터 2는 다른 질문 "A"를 가질 수 있습니다. 그런 다음 MasterVersionQuestions 테이블에서 실제 질문 ID 대신 해당 레이블을 사용합니다.

현실과 조금 더 잘 어울립니다. 아이디어는 A, B, C, D, E, F (실제 ID 1, 5, 102, 15 및 754의 레이블 인) 마스터에 대한 질문 풀을 정의한 다음 버전 2는 A, B, C 및 F를 사용하는 반면 버전 1은 A, B 및 E를 사용합니다 (버전 표에서 실제 ID를 참조하는 대신).

이 방법은 버전 테이블이 "이 버전에있는 질문"을 말하지 않고 "이 버전에 어떤 마스터의 풀 인스턴스가 있는지"를 말합니다.

관련 문제