2012-09-04 32 views
2

我试图在Appointments表和Center表之间的数据库中建立关系。在fk表中添加与未链接值的关系

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

这意味着我得到了以下错误:

The ALTER TABLE statement conflicted with the FOREIGN KEY constraint '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,我不认为这会起作用。

我可以考虑2个其他选项,但它们并不理想,所以如果可能的话,我希望能够使其工作。

任何人都可以帮我吗?

编辑
我刚才看到的东西MSDN上如果有人建议不验证现有的数据。这似乎可以奏效,但这将如何影响数据输入? Reference here

+0

是否有外键不能为空的原因? – devdigital

回答

0

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

1:而不是使用0,你应该尝试使用NULL来代替。因为那时FK就会起作用。

2:像ID一个特殊的ID,其可以支持这种引用

3创建一个“admin”的记录:在最后一种情况下,你可以尝试使用该表上删除触发器,以使其“手动”,但我不建议这种解决方案。

+0

你试过了DBNull.Value吗? –

+1

哈哈我一发现就删除了我的评论:D感谢。 NULL选项适用于我。这只是意味着在使用预约数据时,我必须非常小心。 – Ortund

+0

好吧,那就好了:)我认为这是您的案例的正常和最佳解决方案。 –