2010-08-11 60 views
2

这是一个2部分问题。在不检查现有数据的情况下创建外键

问题1:我试图在需要关闭“检查现有数据创建或重新启用”的表上创建外键。我知道这是一个可视化的选项,但我正在寻找一种以编程方式执行此操作的方法。无论如何要做到这一点?

问题2:我有一个代码表和两个需要引用该代码表的表A和B.我希望这些都是从关系表中引用的,但我希望能够使用同一列。我可以有两个外键指向同一列吗?

回答

9

是的,你可以在父表中有相同的列引用多个表中的不同列。

我不建议在创建时关闭检查FK。如果你现在有不好的数据,你现在需要修复它。否则,如果有人第一次编辑其中一条记录,那么它将不能通过FK检查。

从联机丛书,为什么它是一个坏主意,使用NOCHECK:

如果你不想对 现有数据验证新的CHECK 或外键约束,WITH NOCHECK使用。我们做 不建议这样做,但在 罕见的情况下。在以后的所有数据更新中对新约束条件进行评估后会得到 。 当添加约束 约束时,被WITH NOCHECK抑制的任何约束违规( )可能导致未来 更新失败,如果它们更新的行数不符合约束的 行。

+0

你知道关闭检查命令吗?它会是A.ID - > Rel.ID,B.ID - > Rel.ID他们不能都是外键? (注意箭头指向的方式) – Gage 2010-08-11 18:56:32

+0

如果你想让一列指向两个不同的父键,那么不要这样做。请为两个键中的每一个创建连接表,以便正确执行关系或使用两个字段并允许空值。 – HLGEM 2010-08-11 19:57:21

相关问题