SQL Server 2008 Express - 尽管设置了约束,但“列与现有主键或UNIQUE约束不匹配”

时间:2011-03-30 08:04:50

标签: database-design sql-server-2008-express

我有以下表格

ModuleClass ( <ModuleID>, <Section>, <Number>, StartDate, EndDate)
ClassEnrollment ( <ModuleID>, <Section>, <Term Code>, <User Name>, Role)

现在,ModuleClass实体可以有多个注册,因此存在1到M的关系。但是,当尝试使用ModuleID和Section在ModuleClass和ClassEnrollment之间定义FK时,我得到了

  

表ClassEnrollment中的列   与现有主键不匹配或   UNIQUE约束

但是,ModuleID和Section都参与了PK约束。

(我使用Visual Database Tools创建表并指定关系)。

表达这种关系的更好方法是什么?

2 个答案:

答案 0 :(得分:2)

看起来就像ModuleClass的主键是一个由三列组成的复合键,(ModuleID,Section,Number)。要设置对该表的外键引用,您必须定位所有这三列。

要定位所有这三列,您需要在表ClassEnrollment中包含“Number”列。然后你可以设置

FOREIGN KEY (ModuleID, Section, Number) 
  REFERENCES ModuleClass (ModuleID, Section, Number)

答案 1 :(得分:0)

您确定没有向后指定FK关系吗?使用GUI可视化工具很容易犯这个错误。您必须确保ClassEnrollment中的每一行都引用ModuleClass中的一行。

如果您反向指定关系,则会得到您报告的错误。