1 Вопрос: Может ли MS Access обрабатывать несколько отношений «многие ко многим» в более чем 2 таблицах

вопрос создан в Thu, May 2, 2019 12:00 AM

У меня есть 2 аналогичные базы данных со следующими таблицами:

Таблица 1 - Счета-фактуры

Таблица 2 - Строка накладной (промежуточная - первичная накладная -> основной продукт)

Таблица 3 - Продукты

Таблица 4 - Услуги (или Продукты 2)

Я пытаюсь создать отношения «многие ко многим». Я понимаю необходимость промежуточной таблицы для 1-ко-многим /1-ко-многим.

Проблема в следующем: С таблицей счетов-фактур мне нужно иметь отношение многие ко многим не только с таблицей продуктов, но и с таблицей услуг (или таблицей второго набора продуктов с моей другой базой данных).

Я предполагаю, что с базой данных таблицы сервисов я мог бы создать 2-ю промежуточную таблицу (invoice - > services) Но разве это не создаст 2 отдельные таблицы, связанные с подчиненными формами? Вместо одной связанной подчиненной формы со списком всех продуктов и всех услуг вместе.

Кроме того, в случае, когда счет-фактура будет просто списком продуктов из 2 разных таблиц продуктов (возможно, с использованием составного ключа в обеих таблицах продуктов "prdA-xx" и "prdB-xx", чтобы не было повторяющихся первичных ключи в обеих таблицах?)

Надеюсь, что для обеих проблем есть одно решение?

Хотя я мог бы объединить 2 отдельные таблицы продуктов, так как каждая таблица поставляется от разных поставщиков с тысячами записей в каждой, мне нужно хранить их отдельно для различных требований, некоторых различных полей и нормализации.

Ожидаемое решение будет иметь единый счет-фактуру с несколькими продуктами из одной таблицы и несколькими (услугами или продуктами) из 2-й таблицы, все вместе, надеюсь, в 1 связанной подчиненной форме, если это возможно, поскольку необходимые основные поля будут одинаковыми: "desc, цена, кол-во "

    
0
1 ответ                              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 могут конфликтовать между таблицами, тогда вы должны генерировать уникальные идентификаторы (возможно, префикс с коротким идентификатором для каждой связанной таблицы)

    
0
2019-05-03 14: 11: 32Z
  1. Спасибо, я не знал о UNION, мне нужно провести некоторое исследование, чтобы понять, как это работает. Можно ли сгенерировать уникальный префикс идентификатора в запросе? Или это должно быть сделано с помощью составного ключа в таблице?
    2019-05-05 14: 13: 51Z
  2. Конечно, просто используйте, например, "Prefix1-" & Supplier1ID AS ProductID. Если какой-либо из Идентификаторов поставщика является числовым, вы можете использовать CStr(Supplier1ID)
    2019-05-06 12: 13: 37Z
источник размещен Вот