在fk表中添加与未链接值的关系

时间:2012-09-04 07:50:18

标签: sql sql-server-2008

我正在尝试在Appointments表和Centers表之间的数据库中建立关系。

关于该系统的一个怪癖是,如果在用户区域中没有记录中心,它仍然必须允许记录预约。在这种情况下,链接的centreid将具有0值。

这意味着我收到以下错误:

  

ALTER TABLE语句与FOREIGN KEY约束'fk_appointments_centres'冲突。

我用来创建关系的代码如下:

alter table appointments
add constraint fk_appointments_centres
foreign key (centreid)
references centres(centreid)
on delete cascade
go

这非常重要,因为客户希望从系统中删除中心的功能,在这种情况下,为了正确维护数据,如果中心被删除,它还​​应该删除中心的约会。

理想情况下,我希望这种关系有效,但由于中心表上的centreid列有IDENTITY_INSERT ON,我认为这不会起作用。

我可以想到其他两个选项,但它们并不理想,所以如果可能的话,我希望能让它发挥作用。

任何人都可以帮助我吗?

修改
我刚刚在MSDN上看到有人建议不要验证现有数据。这似乎可行,但这将如何影响未来的数据输入? Reference here

1 个答案:

答案 0 :(得分:0)

我认为将FK设置为​​可能具有不存在的引用ID的列上的记录并不是一个好主意! (你有一个ID为0的中心到哪里参考?)

1:您应该尝试使用NULL,而不是使用0。因为那时FK会起作用。

2:创建一个“管理员”记录,其中包含ID等特殊ID,可以支持此参考

3:在最后一种情况下,你可以尝试在该表上使用Delete触发器来“手动”,但我不建议使用该解决方案。