参照完整性是可交换的即,是否与方向相关?

问题描述

我在 MS Access 2019 中有一些让我感到惊讶的行为,我将其归结为以下几点:

我有两个记录数不同的表:

enter image description here

我需要在它们之间建立一个外部联接,其中包括表 [test 1] 中的所有记录,以及仅 [test 2] 中联接字段相等的那些记录,我想要 referential integrity这样我就不会意外删除修改仅一侧的连接字段。

当我打开包含两个表的“关系”窗口并将字段 [ID] 从表 [测试 1] 拖动到 [测试 2] 时,我需要的连接属性显示为选项 2:

enter image description here

当我尝试创建连接时,我收到一条错误消息,指出表 [test 2] 中的数据违反了参照完整性:

enter image description here

但是,如果我通过将字段 [ID] 从表 [test 2] 拖动到 [test 1] 来定义相反方向的联接,则结果不同。首先,我需要的连接属性显示为选项 3:

enter image description here

我以前见过这种差异,这没问题。但令人惊讶的是,当我尝试创建连接时,现在它可以工作了:

enter image description here

因此,我建立参照完整性的能力似乎取决于我拖动字段以设置联接的方向。 (这会使连接向左还是向右?)我不记得之前看到过任何关于参照完整性的方向依赖(或者它可能被称为非交换性)的内容。参照完整性的目的是防止我删除修改一个表中的连接字段而不对另一个表进行相应的更改。该目标如何取决于我拖动字段以设置联接的方向?

解决方法

简答。不,参照完整性不是可交换的。

X 列引用 Y 列与 Y 列引用 X 列不同。

深入探索。外键的概念是数据关系模型的基础。没有它,模型的表现力将受到极大的阻碍,以至于它永远不会像大约 50 年前那样流行。外键可以是带有或不带有外键约束的外键。尽管如此,由于您在问题中提到的原因,外键约束通常会有所帮助。

您是对的,从 X 拖动到 Y 不会产生与将 Y 拖动到 X 相同的约束。

外连接几乎总是从引用端产生所有结果,并且只从引用端产生有效结果。外连接和内连接在不同的情况下都很有用。这就是 Access 为您提供三个选项的原因。