我有2个具有以下表格的类似数据库:
表1-发票
表2-发票行(中级-主发票->主产品)
表3-产品
表4-服务(或产品2)
我正在尝试建立多对多关系。我知道需要一对多1对多中间表。
问题是: 使用“发票”表,我不仅需要与产品表建立多对多关系,而且还需要与服务表(或与我的其他数据库建立的第二组产品表)建立多对多关系。
我假设使用服务表数据库,我可以创建第二个中间表(发票->服务),但是这不会创建2个单独的子窗体相关表吗?不仅仅是一个包含所有产品和所有服务的列表的相关子表单。
此外,在发票仅是来自2个不同产品表的产品列表的情况下(可能在产品表“ prdA-xx”和“ prdB-xx”上都使用组合键,因此没有重复的主要两个表中的键?)
我希望这两个问题有一个统一的解决方案?
虽然我可以合并两个单独的产品表,但由于每个表来自不同的供应商,每个表都有数千条记录,因此我需要针对不同的需求,某些不同的字段和规范化将它们分开。
期望的解决方案将具有一张发票,其中一张表中有多个产品,第二张表中有多个(服务或产品),如果可能的话,希望在一个相关的子表格中加在一起,因为所需的基本字段将是相同的:“ desc,价格,数量”
答案 0 :(得分:0)
您可能对实际的多对多关系有误解。无论如何,这就是我如何处理不同产品表的方式:我将使用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(可能为每个链接的表添加一个简短标识符的前缀)