【问题标题】:MS Access with referential integrity not allowing NULL values具有引用完整性的 MS Access 不允许 NULL 值
【发布时间】:2016-06-17 00:27:02
【问题描述】:

Microsoft Access 数据库中有两个表。其中一个定义元素,另一个引用它们。然而,这个参考是可选的。该值可以为 NULL。只要外键存在,我就不允许插入或更新 NULL 值。在没有外键的情况下保存NULL值后,我无法添加键。

引用列设置为“Required = false”,并且允许单独使用 NULL 值。只有参照完整性不能处理 NULL 值。

如何解决?

更新:我想到了一些可能相关的事情:我的外键使用了两列。其中一个始终设置,但另一个可以为空。

添加示例架构:

表总线:
栏目:
• objid 整数
• busnumber 整数
• 名称 varchar
主键:objid、busnumber

表连接:
栏目:
• objid 整数
• 名称 varchar
• bus1 整数
• bus2 整数
主键:objid、名称

conn (objid, bus1) 将总线 (objid, busnumber) 引用为 1:n 和
conn (objid, bus2) 将总线 (objid, busnumber) 引用为 1:n

这两个引用都是可选的,但 objid 是上级对象的一部分并且总是被设置。

【问题讨论】:

  • 请发布两个表中的示例数据,指出哪些列用作索引和外键。当然,你有一个组合键是相关的。
  • @Remou:我在上面添加了一个示例架构描述。
  • varchar?您使用的是 MS Access(Jet/ACE) 后端还是 SQL Server?
  • 这是文本。我不习惯访问数据类型,我更经常在家中使用 MySQL 或 SQLite。
  • 我看不出这是如何工作的,就目前而言。我只能建议您删除参照完整性并通过表单进行验证。

标签: ms-access null referential-integrity


【解决方案1】:

在所示的示例设置中,很有可能将空值编辑到现有元素并使用空值创建记录。我怀疑您的某些设置可能不正确。

【讨论】:

  • 好的,但它只适用于单列引用,或多列但可能它们都需要为空,而不仅仅是其中一些。
  • 是的,FK 可以全部为 null 或全部完成,但在使用参照完整性时不能混合使用。您可以创建一个自动编号并使用它。
  • 在多次尝试使用“忽略 Nulls”索引属性、“唯一”属性打开和关闭、主表和外部表中的不同索引组合等的各种组合后,我无法得到它使用多列键。有一次我认为我让它工作了,甚至提交了一个答案,但我忘记了重新启用参照完整性约束。最后,我得出与 LonelyPixel 相同的结论,即 Access 不支持可空、多列关系,同时仍强制执行引用完整性。
  • 虽然它很旧,但我发现自己遇到了数字类型字段 FK 的问题。除了 Fionnuala 的图片中显示的设计外,请记住参考表 (ElementID) 中的 FK 字段必须将其“默认值”属性设置为空白。当您将字段定义为数字时,Access 将其默认为“0”,并且 0 Null,这反过来会在引用表中创建新记录,从而违反关系的引用完整性属性。
猜你喜欢
  • 2014-11-27
  • 2012-06-07
相关资源
最近更新 更多