在表't_name'上引入FOREIGN KEY约束'c_name'可能会导致循环或多个级联路径
-
03-07-2019 - |
题
我有一个名为 Lesson
的数据库表:
列 [LessonID,LessonNumber,Description]
...以及其他一些列
我有另一个名为 Lesson_ScoreBasedSelection
的表:
列: [LessonID,NextLessonID_1,NextLessonID_2,NextLessonID_3]
课程完成后,会在 Lesson_ScoreBasedSelection
表中查找其LessonID,以获得三个可能的下一课,每个课程都与特定的分数范围相关联。如果得分为0-33,则将使用存储在NextLessonID_1中的LessonID。如果分数为34-66,则将使用存储在NextLessonID_2中的LessonID,依此类推。
我想约束 Lesson_ScoreBasedSelection
表中的所有列,其中外键引用课程表中的LessonID列,因为 Lesson_ScoreBasedSelection
表中的每个值都必须具有在课程表的LessonID列中输入。我还希望启用级联更新,以便如果Lesson表中的LessonID发生更改,则 Lesson_ScoreBasedSelection
表中对它的所有引用都会更新。
这个特定的级联更新似乎是一个非常简单的单向更新,但当我尝试将外键约束应用于 Lesson_ScoreBasedSelection
表中的每个字段时引用Lesson表中的LessonID字段,我收到错误:
在表' Lesson_ScoreBasedSelection
'上引入FOREIGN KEY约束'c_name'可能会导致循环或多个级联路径。
任何人都可以解释为什么我会收到此错误或如何实现我所描述的约束和级联更新?
解决方案
鉴于SQL Server对此的约束,为什么不通过创建一个以SelectionID(PK),LessonID,Next_LessonID,QualifyingScore作为列的表来解决此问题。使用约束来确保LessonID和QualifyingScore是唯一的。
在QualifyingScore列中,我使用tinyint,并将其设为0,1或2.那么,或者您可以执行QualifyingMinScore和QualifyingMaxScore列,这样您就可以说,
SELECT * FROM NextLesson
WHERE LessonID = @MyLesson
AND QualifyingMinScore <= @MyScore
AND @MyScore <= QualifyingMaxScore
干杯,结果 埃里克
其他提示
在任何给定的链接表中,您不能有多个级联RI链接到单个表。 Microsoft 解释了这一点:
您收到此错误消息是因为 在SQL Server中,无法显示表 在所有列表中不止一次 这种级联参照行为 由DELETE或者启动 更新声明。例如, 层叠参照行动的树 必须只有一条路径 关于级联的特殊表 参考行动树。