Ms access 引用完整性是可交换的(即,它是否依赖于方向)?

Ms access 引用完整性是可交换的(即,它是否依赖于方向)?,ms-access,outer-join,referential-integrity,Ms Access,Outer Join,Referential Integrity,我在MS Access 2019中的一些行为让我感到惊讶,我将其归结为以下几点: 我有两个记录数不同的表: 我需要在它们之间建立一个外部联接,该联接包括表[test 1]中的所有记录,并且只包括联接字段相等的[test 2]中的记录,我希望这样做,这样我就不会意外地删除或修改只有一侧的联接字段 当我打开两个表的关系窗口并将字段[ID]从表[test 1]拖动到[test 2]时,我需要的连接属性显示为选项2: 当我尝试创建联接时,会收到一条错误消息,指出表[test 2]中的数据违反了引用完

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

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

我需要在它们之间建立一个外部联接,该联接包括表[test 1]中的所有记录,并且只包括联接字段相等的[test 2]中的记录,我希望这样做,这样我就不会意外地删除或修改只有一侧的联接字段

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

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

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

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


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

简短回答。不,引用完整性不是可交换的

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

深潜。外键的概念是数据关系模型的基础。如果没有它,模型的表达能力将受到极大的限制,它将永远不会像50年前那样流行起来。外键可以是具有或不具有外键约束的外键。尽管如此,外键约束通常会有所帮助,因为您在问题中提到了一些原因

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


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

查询不依赖于约束。当约束保持不变时,一些表达式返回与其他表达式相同的结果,因此更多的查询返回所需的结果。“参考完整性”约束包括子代码值出现在其他位置。那不是通勤;其他地方可能会有更多的价值。c上的x左连接y是c上的y右连接x;它不是c上的y左连接。“它们之间的外部连接”“我希望具有引用完整性”“不清楚您想要什么,您将查询/连接与约束保持混合在一起。请在文本中提供一个。绝对不能通过链接两个自动编号字段来设置引用完整性。关系链接必须位于PK和FK字段上,并且FK不能为自动编号。例如,当您希望阻止不在Customers表中的客户的订单时,将使用引用完整性。即使定义了关系,也无法阻止使用不同的联接构建查询。无论如何,在自动编号字段上进行链接是不合理的。表中唯一可以建立链接的常用数据是
数据
字段。如果Test1是“父级”或“主级”(或查找表),那么Test2由于记录“D”而导致完整性失败。Test2可以是父表,Test1可以是依赖表。请。从其他文本中转述或引用。给出你所需要的&把它和你的问题联系起来。仅将图像用于不能表示为文本或扩充文本的内容。包括图例/键和说明以及图像。请清楚地说明您要做什么,以实现什么,以及您在什么状态开始的一系列点击,因为加入和设置FKs是两件独立的事情。如果您试图遵循参考资料,请识别并引用它。否则,说出你为什么要为这个目标做这些事情。很好地解释了。非常感谢。