【问题标题】:constraint Problem /Solution in sqlServersql Server中的约束问题/解决方案
【发布时间】:2010-03-03 21:58:12
【问题描述】:

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

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

p.s:此外,将来我想根据新闻、产品或画廊或它们的混合查询我的图片表。

【问题讨论】:

  • 谢谢大家,我弄错了

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


【解决方案1】:

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

当您创建外键时,sql server 会检查插入的外键是否存在于引用的表中,如果不存在,则 RDMS 拒绝插入该行。

【讨论】:

  • 谢谢,我如何将 null 分配给外键,例如在我的图片对象中:private int _productId;如果我不赋值,它会自动获得 0 值。
  • 您可以将其设置为可空:private int? _productID 如果你正在使用 c# msdn.microsoft.com/en-us/library/b3h38hb0.aspx
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多