Дано: Сеть распределенных баз (MS Navision, он же Microsoft Dynamics NAV ) вида:

Физически — 3 сервера ms sql, на каждом сервере по несколько баз данных (магазины, склады, разные виды учетных баз).

Логически — каждая база содержит  несколько фирм/компаний. Фирмы могут иметь таблицы 2х видов — общие (одна таблица для всех компаний в базе) и таблицы для фирмы (каждая фирма имеет свой дубликат таблицы, вида —  Фирма$Имя_Таблицы).

Так же фирмы (условно так их назавем), могут быть определенного типа  — магазинами или складами (на самом деле ещё есть фирма и база бухгалтерии и некая управляющая), так же они различаются своей территориальной принадлежностью (Москва, Питер). Так же имеется имеется некое название склада/магазина связанное с фирмой (как правило это одна фирма — одно название), именно оно может использоваться для фильтрации в самом запросе (Н-р МГ001 в фирме МАГАЗИН001 ).  Эти признаки не указаны в явном ввиде в таблицах самой фирмы.

Общее число этих фирм порядка 50-70 шт.

Задача : Необходимо выполнять запросы для всех фирм сразу или для фирм отобранных по определенному критерию — склады/магазины, принадлежность — москва/питер. При этом учесть наличие как общих таблиц, для них надо выполнять не более 1 запроса к каждой SQL базе (ибо это 1 таблица), так и возможность выполнения запросов для таблиц принадлежащих фирме (структура одинакова) по их общей части (н-р маг001$Item и маг002$Item по имени Item).

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

Завтра нарисую ориентировочную структуру распределенной БД.

продолжение следует…