't_name'테이블에 외국 키 제약 조건 'C_Name'을 소개하면 사이클 또는 여러 캐스케이드 경로가 발생할 수 있습니다.
-
03-07-2019 - |
문제
데이터베이스 테이블이 있습니다 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에서 삭제 또는 업데이트 문으로 시작된 모든 계단식 참조 작업 목록에 테이블이 두 번 이상 나타날 수 없으므로이 오류 메시지를받습니다. 예를 들어, 계단식 참조 조치의 트리는 계단식 참조 조치 트리의 특정 테이블에 대한 하나의 경로 만 있어야합니다.