MS Access 多对多关系

Posted

技术标签:

【中文标题】MS Access 多对多关系【英文标题】:MS Access Multiple Many-to-Many relationships 【发布时间】:2018-03-27 17:31:12 【问题描述】:

我有一个“责任”表,它当前在下拉框中提供可用的承保金额。它有以下字段:

[CoverageAmountID]
[CoverageAmount]
[Cost]
[StateID]
[ProductID]
[CompanyID]

有许多承保金额、公司、州和产品。

当前,一个复杂的查询会提取正确的 Coverage Amount 选项。我的问题是我是否需要拆分以及如何拆分?

我现在没有这方面的关系,但有状态、产品和公司表。

我是否以 CoverageAmountID、StateID、ProductID 和 CompanyID 作为主键创建联结表?

有没有更好的方法来处理多个 m:m 联结表?

我正在为如何构建这些数据而苦恼。附图显示了我目前在表格中的内容。

【问题讨论】:

我看到的是那些多值字段吗?我从不使用它们。或者那些实际上是 CSV 字符串?不确定哪个更糟。严格的数据规范化要求连接表。这是规范化和数据输入/输出轻松之间的平衡行为 - “规范化直到它受伤,非规范化直到它起作用”。 我没有提到我的数据库中有 13 个以这种方式构造的其他表。我想规范化所有内容,但不确定如何构造数据,因为它们都有四个表,每个表都有许多记录。 要摆脱多值字段,您需要一个带有 StateID 的 State 表和一个带有 CompanyId 的 Company 表。然后使用只有 CoverageAmountID 和 StateID 字段的联结表(您应该将这两个主键设为主键)。因此 CoverageAmountID 1 将在您的联结表中有 3 个条目。还有一个具有 CoverageAmountID 和 CompanyID 的联结表(同样两者都应该是主键),因此 CoverageAmountID 2 将在此联结表中有 2 个条目。 感谢 Jeffery,除了消除多值字段之外,还有更好的方法来规范化这些数据吗? 【参考方案1】:

标准化负债数据库:

不要在一个字段中使用多个值,而是为多对多关系使用中间表 更好地使用数字作为键,在关系中使用文本将具有挑战性。 如果每个险种有一个产品,那么您就有一对多关系,在这种情况下,您可以使用从 CoverageTbl 到 ProductTbl 的直接关系 是的,对于 ProductTbl、StateTbl 和 CompanyTbl,您需要具有自己的主键的单独表 附件是显示关系的暂定设计,注意所有 ID 都是数字类型,代码是文本类型(5) database design/relationships

【讨论】:

谢谢莫里斯!这就是我一直在寻找的答案。我希望避免这样的事情,但我想如果这是正确的方法,那么我会硬着头皮。我有很多桌子要这样做。阿格!!

以上是关于MS Access 多对多关系的主要内容,如果未能解决你的问题,请参考以下文章

MS Access:对多个表的交叉表查询(多对多关系)

在 MS Access 中,如何以多对多关系列出记录,以使所列出的表中的记录不重复?

通过链接到SQL Server数据库的MS Access以多对多关系插入数据(中间表)

Access中的多对多关系来自单个表

MS SQL 使用联结表创建多对多关系

父/子表单上的多对多关系限制了数据输入