【问题标题】:Can MS Access handle multiple many-to-many relationships across more than 2 tablesMS Access 可以跨超过 2 个表处理多个多对多关系吗
【发布时间】:2019-05-02 15:18:25
【问题描述】:

我有 2 个类似的数据库,包含以下表格:

表 1 - 发票

表 2 - 发票行(中间 - 初级发票 -> 初级产品)

表 3 - 产品

表 4 - 服务(或产品 2)

我正在尝试创建多对多关系。我了解一对多/一对多的中间表的需求。

问题是: 对于 Invoices 表,我不仅需要与 products 表,还需要与 services 表(或与我的其他数据库的第二组 products 表)建立多对多关系。

我假设使用服务表数据库,我可以创建第二个中间表(发票-> 服务)但这不会创建 2 个单独的子表单相关表吗?而不仅仅是 1 个相关的子表单,其中包含所有产品和所有服务的列表。

此外,如果发票只是来自 2 个不同产品表的产品列表(可能在两个产品表“prdA-xx”和“prdB-xx”上使用复合键,因此没有重复的主两个表的键?)

我希望这两个问题都有一个解决方案?

虽然我可以合并 2 个单独的产品表,但由于每个表来自不同的供应商,每个表都有数千条记录,我需要将它们分开以适应不同的需求、一些不同的字段和规范化。

预期的解决方案将有一张发票,其中包含来自一个表的多个产品和来自第二个表的多个(服务或产品),如果可能的话,希望在一个相关的子表单中,因为所需的基本字段将是相同的:“desc,价格,数量”

【问题讨论】:

    标签: ms-access many-to-many


    【解决方案1】:

    您可能对多对多关系的实际含义有误解。无论如何,这里是我将如何处理不同的产品表:我将使用 UNION 创建一个查询,这将使所有单独的表作为一个工作。简短的例子:

    SELECT Supplier1ID AS ProductID, Supplier1ProductName AS ProductName, 'tblSupplier1' AS SourceTable, ThisFieldOnlyAppliesToSupplier1 FROM tblSupplier1
    UNION
    SELECT Supplier2ID AS ProductID, Supplier2ProductName AS ProductName, 'tblSupplier2' AS SourceTable, NULL AS ThisFieldOnlyAppliesToSupplier1 FROM tblSupplier2
    

    您可以添加任何其他字段/表并将其保存为查询。唯一的问题是如果 ProductID 可能在表之间发生冲突,那么您必须生成唯一 ID(可能为每个链接表添加一个短标识符作为前缀)

    【讨论】:

    • 谢谢,我不知道 UNION,我必须对其进行一些研究以了解它是如何工作的。是否可以在查询中生成唯一的 id 前缀?还是必须使用表中的复合键来完成?
    • 当然,例如使用"Prefix1-" & Supplier1ID AS ProductID。如果任何供应商ID 是数字,您可以使用CStr(Supplier1ID)
    猜你喜欢
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    相关资源
    最近更新 更多