Может ли MS Access обрабатывать несколько отношений «многие ко многим» в более чем 2 таблицах - PullRequest
0 голосов
/ 02 мая 2019

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

Таблица 1 - Счета

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

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

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

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

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

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

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

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

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

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

1 Ответ

0 голосов
/ 03 мая 2019

У вас может быть неправильное понимание того, что на самом деле является отношением многих ко многим.В любом случае, вот как я буду работать с таблицами различных продуктов: я создам запрос с использованием 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 могут конфликтовать между таблицами, тогда вы должны генерировать уникальные идентификаторы (возможно, префикс с коротким идентификатором для каждой связанной таблицы)

...