访问 2007 引用完整性而不使用表中的查找

Posted

技术标签:

【中文标题】访问 2007 引用完整性而不使用表中的查找【英文标题】:Access 2007 referential integrity without using lookup within table 【发布时间】:2012-05-04 10:56:05 【问题描述】:

我在这里看到了关于不在表中使用查找的各种帖子。如果不这样做,如何在字段和查找表中的允许值之间强制执行参照完整性?我无法在表字段和查找表中的字段之间创建关系,因为我无法在字段上创建唯一(无重复)索引 - 特定值需要在表中的记录中多次出现。但是,如果我使用字段属性对其进行查找并从查找表中指定它必须包含的字段,则可以确保无法将数据输入到不在查找表中的该字段中。

或者我在这里完全搞错了?

【问题讨论】:

【参考方案1】:

我建议您始终创建用于编辑记录的表单。在这些表单中,您可以创建在正确的表和字段中执行查找的组合框。那里有一些选项,因此您可以将数据输入限制为仅存储在表中的那些值。此选项称为“列表限制”(您将在组合属性中看到它)。

另一种强制数据存在于查找表中的重要方法是通过您的关系。

tblProducts
  ProductID (primary key)
  CategoryID (foreign key)
  ProductDescription

tblCategories
  CategoryID (primary key)
  Category

在关系窗口中,您可以在 CategoryID 字段中定义上述两个表之间的关系。你在这里完成了几件事。仅在 Products 表中存储 CategoryID 会更有效,因为您将存储更少的数据。此外,如果您更改类别上的名称,所有记录都将立即反映该更改。在您显示产品及其类别的每个地方,您都需要创建一个组合框,以便显示类别描述而不是显示类别 ID。

附带说明,我建议您很少将值列表选项用作组合中的行源类型。使用 Table/Query 选项然后创建适当的查找表是一种更加健壮和灵活的设计。

【讨论】:

谢谢,但我确实提到我无法创建关系,因为该字段不是唯一的。虽然表单的用户仅限于组合框项目,但这仅适用于通过表单输入的数据。在它到达用户之前,我需要从各种来源上传数据,除非限制是在表格中的字段上,而不仅仅是在表单控件上,否则可能会存储不正确的数据。 您当然可以在字段不唯一的情况下创建关系。主键/索引是唯一强制唯一性的东西。 好吧,当我尝试这样做时,我收到一条错误消息,指出无法创建关系,因为主表中的字段上没有唯一索引 所以你的一些表没有定义任何主键? 是的,它们每个都有一个主键,但是在我提到的需要查找值的字段不是键的情况下。但即使我将字段设置为查找并限制为列表,使用 APPEND 语句加载数据仍然允许存储违反参照完整性的数据。

以上是关于访问 2007 引用完整性而不使用表中的查找的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot:仅访问 JPA 中的关联列值而不获取完整的关联实体

将完整的 ADO 记录集插入现有的 ACCESS 表而不使用循环

访问 SQL 以创建一对多关系而不强制参照完整性

SQL Server 数据库中的枚举

数据库概念和操作数据库的命令

完整性约束语法定义