Во-первых, у меня были бы независимые системы выставления счетов в example.com, example2.net и anotherexample.com, все они имеют свои собственные внутренние первичные ключи для счетов, генерируемых внутри каждой из этих систем.Каждая система должна иметь свою собственную независимую копию логики выставления счетов, потому что вы не хотите, чтобы отключение на одном сервере приводило к отключению выставления счетов на каждом сервере.
Всякий раз, когда у вас есть распределенная система, где локальные копии создают записи для чего-либоэто будет объединено позже, рекомендуется использовать GUID в качестве локального первичного ключа или, если у вас есть философское возражение против GUID в качестве PK, создайте GUID в качестве ключа кандидата .Таким образом, вы можете собирать счета-фактуры со всех ваших систем (и любых будущих), не беспокоясь о ключевых коллизиях, и вы сможете отслеживать объединенные записи обратно в исходные записи, если вам когда-нибудь придется это делать.
Далее вам потребуется интегрированная система выставления счетов, в которой все детали счета выставляются периодически.Чтобы облегчить это, вам нужны процессы в каждой локальной системе фактурирования, которые подкачивают свои собственные записи в централизованную систему.Держите флажок на счетах в локальных системах, чтобы определить, какие счета были успешно загружены - или, если у вас очень большие объемы, используйте таблицу рабочего списка, содержащую ключи счета, которые все еще нуждаются в передаче, вместо флага прямо на локальном счете.таблица.
Централизованная система выставления счетов также хочет иметь исходный код в комбинированной таблице накладных, чтобы вы могли легко определить, какой веб-сайт изначально создал накладную.
Что касается номеров накладных, яИсходя из вашего вопроса, я предполагаю, что клиент немного нервничает по поводу правильной последовательности номеров счетов.Централизованная система может генерировать эти номера для вас, используя веб-службу для получения следующего идентификатора счета.Если централизованная служба по какой-либо причине не работает, вы все равно можете дать клиенту «ссылку на заказ», т. Е. GUID, и просто удерживать номер счета-фактуры, пока он не будет сгенерирован через центральный сервер.Это должно удовлетворить потребность вашего клиента в строгих последовательных номерах счетов-фактур, сохраняя при этом возможность работать с несколькими сайтами на нескольких серверах.
Если вашему клиенту на самом деле не важна строгая последовательность номеров счетов-фактур, то другой альтернативой являетсяиметь центральную систему, генерирующую блоки зарезервированных номеров счетов и распределяющих их по каждому веб-сайту.Когда веб-сайту не хватает выделенных ресурсов, он запрашивает у центрального сервера другой блок.Это дает вам передышку в последовательностях на случай, если возникнут трудности в общении.