Показать сообщение отдельно
Старый 10.06.2002, 15:12   #3  
skof is offline
skof
NavAx
NavAx Club
 
100 / 12 (1) ++
Регистрация: 09.01.2002
Адрес: РБ, Минск
В прошлом году мы разрабатывали систему синхронизации нескольких баз данных
Axapta, так что бы сама система "не видела" синхронизации, и решали эту проблему.
Вот выдержка из нашей документации по системе синхронизации:

В поле DataAreaId хранится идентификатор компании, к которой принадлежит данная запись в нашем случае это: «Hld», «Msk», «Pit» и «Tvr». В поле RecId хранится порядковый номер записи, который уникален во всех записях, принадлежащих одной компании во всех таблицах. Таким образом, сочетание этих полей дает уникальный ключ, который мы и будем применять.
Здесь необходимо знать о правилах присвоения значения поля RecID. Axatpa не пользуется никакими сервисами базы даных для вычисления нового номера в этом поле. Вместо этого она ведет таблицу SystemSequences следующей структуры:

Имя столбца | Тип | Значение по умолч. | NULL | Описание столбца.
ID | NUMBER(10) | 0 | NOT
NEXTVAL | NUMBER(10) | 0 | NOT | Начало следующего пула номеров
MINVAL | NUMBER(10) | 0 | NOT | Минимальный номер
MAXVAL | NUMBER(10) | 0 | NOT | Максимальный номер
CYCLE | NUMBER(10) | 0 | NOT | Номера по кругу
NAME | VARCHAR2(20) | ' ' | NOT | Наименование последовательности
TABID | NUMBER(10) | 0 | NOT
DATAAREAID | VARCHAR2(3) | 'dat' | NOT | Идентификатор компании
RECID | NUMBER(10) | | NOT | Номер записи

Работает AXAPTA с этой таблицей следующим образом:
1. При вставке первой записи в новую компанию система AXAPTA добавляет в таблицу SystemSequences запись. В поле DATAAREAID устанавливается значение равное идентификатору компании, а в поля MINVAL и NEXVAL записывается единица.
2. Сразу после этого система AXAPTA берет лот номеров (лот в данном случае это - несколько подряд идущих номеров, AXAPTA берет 25). И записывает в поле NEXTVAL следующий свободный номер – 26.
3. Заносит в таблицу, с которой все началось запись с RECID равным 1 и DATAAREAID равным идентификатору компании.
4. После того как номера в лоте заканчиваются, система AXAPTA снова читает таблицу SystemSequences, берет оттуда NEXTVAL как первый номер следующего лота. А в таблицу SystemSequences записывает значение NEXTVAL+25.
Таким образом AXAPTA решает две проблемы – каждый пользователь ведет свой лот номеров RECID и значения этого поля не пересекаются, второе – пользователь (вернее его приложение) обращается к таблице SystemSequences один раз на 25 операций вставки и таким образом не возникает ожидания из-за обращения всех к этой таблице.


Надеюсь понятно...
К сожалению таблица рассыпалась, но заинтересованные лица я думаю восстановят...