't_name'테이블에 외국 키 제약 조건 'C_Name'을 소개하면 사이클 또는 여러 캐스케이드 경로가 발생할 수 있습니다.

StackOverflow https://stackoverflow.com/questions/803836

문제

데이터베이스 테이블이 있습니다 Lesson:
열 : [LessonID, LessonNumber, Description] ... 다른 열

다른 테이블이 있습니다 Lesson_ScoreBasedSelection:
열 : [LessonID,NextLessonID_1,NextLessonID_2,NextLessonID_3]

수업이 완료되면 교훈은 Lesson_ScoreBasedSelection 테이블은 세 가지 가능한 다음 수업을 얻을 수있는 테이블이며, 각 수업은 특정 범위의 점수와 관련이 있습니다. 점수가 0-33 인 경우, NextlessOnid_1에 저장된 레슨이 사용됩니다. 점수가 34-66 인 경우, NextlessOnid_2에 저장된 레슨은 사용됩니다.

나는 모든 열을 제한하고 싶습니다 Lesson_ScoreBasedSelection 수업 테이블의 레슨 열을 참조하는 외래 키가있는 테이블은 Lesson_ScoreBasedSelection 테이블에는 레슨 테이블의 레슨 열에 항목이 있어야합니다. 또한 캐스케이드 업데이트가 켜져 있으므로 레슨 테이블이 변경되면 모든 참조가 Lesson_ScoreBasedSelection 테이블이 업데이트됩니다.

이 특정 캐스케이드 업데이트는 매우 간단한 편도 업데이트처럼 보이지만, 각 필드에 외래 키 제약 조건을 적용하려고 할 때 Lesson_ScoreBasedSelection 테이블 레슨 테이블에서 레슨 필드를 참조하면 오류가 발생합니다.

테이블에 외국 키 제약 'C_Name'소개Lesson_ScoreBasedSelection'사이클 또는 여러 개의 캐스케이드 경로를 유발할 수 있습니다.

누구든지 내가 왜이 오류가 발생했는지 또는 내가 설명한 제약 조건 및 계단식 업데이트를 달성 할 수있는 방법을 설명 할 수 있습니까?

도움이 되었습니까?

해결책

이것에 대한 SQL Server 제약 조건을 감안할 때, SelectionID (PK), LessionID, Next_lessonid, Qualifyingscore가 열로 테이블을 만들어이 문제를 해결하지 않겠습니까? 구속 조건을 사용하여 LessonId와 Qualifingscore가 고유한지 확인하십시오.

Qualifingscore 열에서 나는 tinyint를 사용하고 0, 1 또는 2로 만들거나, 또는 당신은 당신이 말할 수 있도록 Qualifingminscore 및 Qualifingmaxscore 열을 할 수 있습니다.

SELECT * FROM NextLesson 
WHERE LessonID = @MyLesson 
AND QualifyingMinScore <= @MyScore 
AND @MyScore <= QualifyingMaxScore

건배,
에릭

다른 팁

주어진 링크 테이블의 단일 테이블에 둘 이상의 계단식 RI 링크를 가질 수 없습니다. 마이크로 소프트 이것을 설명합니다 :

SQL Server에서 삭제 또는 업데이트 문으로 시작된 모든 계단식 참조 작업 목록에 테이블이 두 번 이상 나타날 수 없으므로이 오류 메시지를받습니다. 예를 들어, 계단식 참조 조치의 트리는 계단식 참조 조치 트리의 특정 테이블에 대한 하나의 경로 만 있어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top