参考数据完整性

问题描述:

我正在参考sql中的参考数据完整性。参考数据完整性

我想创建一个场景,我有三个表名branch1,branch2branch3Branch2Branch3与外键的branch1表连接。

现在我想对branch1表创建一个系统,如果我在branch1表中插入“主动”的branch2branch3表将能够在表中插入,当我在branch1表中插入“无效”,另2个表将无法在表格中插入任何东西。

这一切都想用参照数据完整性来创建。

所以请帮助我,我都试过,但我没有成功

+1

你所描述的与引用完整性无关(至少不是外键的实际工作方式)。这更多地描述了应用程序语义。 – Oded 2013-03-09 12:03:51

+0

我正在谈论级联更新和删除,可以用这些级联更新和删除来做到这一点。 – Mufasil 2013-03-09 12:06:03

+0

这个问题没有明确问到。以下声明意味着什么? '其他2个表格将无法在表格中插入任何东西.'表格不会插入到其他表格中。你的意思是,另外两张桌子变成只读吗? – Tim 2013-03-09 13:19:53

您可以使用触发器。

BRANCH2BRANCH3上的触发器可用于检查BRANCH1表中的ACTIVE。如果存在,插入可以继续,否则插入可以取消。

请参阅MSDN Create Trigger doco的语法。

这里有一个教程,我发现过一个快速谷歌:An Intro to SQL Triggers @ SQL Team


如果您还需要控制参照完整性,触发器可用于这也太 - 如果父记录从一个表中删除,例如,该表上的触发器可以首先从其他表中删除子记录,以确保约束不会阻止删除。

但是,由于您的问题中没有描述真正的父母/子女关系,因此我无法看到参照完整性如何应用。

+0

好,但我想要这些与级联参照完整性 – Mufasil 2013-03-09 12:17:23

+1

@Mufasil你在你的问题中描述的与级联参照完整性无关。你的问题描述了基于'BRANCH1'中的值控制'BRANCH2'和'BRANCH3'上的插入。 – Sepster 2013-03-09 12:19:08

+0

好的,但有人说我用级联的参照完整性。你可以告诉我,它是可以做到的。 – Mufasil 2013-03-09 12:21:44

的表不将数据插入到其他表。查询确实如此。您始终可以在查询中添加'where'子句以使更新有条件。

+0

是的确切,但我希望如果我创建这三个表我想创建在branch1表中的级联方法,如果我插入'主动'的查询在表branch1然后我插入到其他2表插入将不执行。 – Mufasil 2013-03-09 12:12:22