无法创建外键

时间:2011-09-11 08:10:57

标签: sql-server tsql sql-server-2008 foreign-key-relationship

有两个表:

  • 包含Course列和CourseID (PK, int, not null)列以及
  • 的表DepartmentID (PK, FK, int, not null)
  • Class,其中包含ClassID (PK, int, not null)列和CourseID (int, not null)

我尝试将Class.CourseID FK设为Course.CourseID但我收到此消息:

  

表'Course'中的列与现有的主键或   UNIQUE约束。

我该怎么办?

2 个答案:

答案 0 :(得分:1)

DepartmentID不应该是表课程主键的一部分。 或者,如果你需要它,那么在Class表中重新修改FK,这样它就会引用两个(所以表是课程的真正主键)。

答案 1 :(得分:0)

FK的“结构”必须与PK相同 - 两个字段。只有CourseID作为FK,你无法区分记录。

实施例: 设c1,c2为课程记录,d1为课程记录:

c1: {1, 1}
c2: {1, 2}

现在假设d1记录像{1,1} - >你的意思是c1还是c2?

您应该只使用CourseID PK或制作复杂的FK(CourseID,DepartmentID)或在课程表中创建代理PK。就个人而言,我会选择第一或第三种解决方案