约束sqlServer中的问题/解决方案

时间:2010-03-03 13:48:13

标签: sql-server-2005 foreign-keys constraints

对不起我的浅薄问题。
想象一下,我的DataBase中有4个表(SQLServer 2005)。
图片新闻产品图库表格。在我的图片表中我有3个外键到所有其他3个表,并且所有外键都可以为空,默认值= -1。所有表都有主键,并且是Identity。

在我的网络表单中,我插入的每张照片都与一个两个三个其他表相关。
 示例:它可能与NewsId = 4,galleryId = 2有关,与Product Table无关。所以ProductId = -1。   
我不知道如何插入照片而不给出此错误“INSERT语句与FOREIGN KEY约束冲突”FK_Picture_Product“”
。 我知道为什么会这样,这是因为强制FOREIGN KEY约束。但是我不知道如何设计我的数据库以克服这个问题。我希望我可以解决它。

p.s :此外,我希望将来根据新闻,产品或图库查询我的图片表,或者混合使用。

3 个答案:

答案 0 :(得分:1)

这是因为您没有ID为-1的任何产品,您必须将默认值设置为NULL并插入空值而不是-1

当你创建一个外键时,sql server会检查所引用的外键是否存在于引用的表中,如果它不存在,那么RDMS拒绝插入该行。

答案 1 :(得分:1)

为什么使用-1来定义未定义的?这就是NULL的用途!删除默认值,并在没有FK行时允许这些行为NULL。

答案 2 :(得分:1)

为什么外键的默认值为-1?当您插入一个不填充其中一个外键的新行时,外键将设置为-1,这与外表中的行的键不匹配。

我通常只对外键没有默认值,如果外表中没有指向行的链接,则外键为空。这是合法的,因为您已将所有外键定义为可为空的