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 中,如何以多对多关系列出记录,以使所列出的表中的记录不重复?