Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Единый справочник в распределенной базе ( ASA8, SQLRemote ) / 3 сообщений из 3, страница 1 из 1
21.05.2006, 10:35
    #33740862
nel123@mail.ru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Единый справочник в распределенной базе ( ASA8, SQLRemote )
Есть распределенная БД : одна консолидированная БД – данные туда добавляются только посредством репликации, и множество ( до 50 ) удаленных БД – данные туда вносятся и через ПО и посредством репликации. Репликация двунаправленная. В базе требуется создать таблицу-справочник, единую для всех баз. Структура таблицы ( упрощенная) :

PrimKey – integer
Name - char(128)

Значение первичного ключа ( PrimKey ) в каждой базе генерируется автоматически и по-определению не может дублироваться в разных базах.

Значение поля ( Name ) должно быть уникальным в таблице, но теоретически возможна ситуация когда в разных удаленных базах условно-одновременно добавят одинаковые значения данного поля. Как разрулить данную ситуацию ?

Теоретически представляется следующий механизм :
Если удаленные базы А. и Б. одновременно добавили записи с одинаковым значением поля Name. Репликация от базы А. в консолидированную базу ( КБД ) пройдет успешно. Но следующая репликация от базы Б. должна порождать ошибку и возвращать в базу Б. реплику, изменяющую первичный ключ у строки добавленной в базу Б. на значение , равное первичному ключу строки с таким же значением поля Name в консолидированной базе данных.

Но как этот механизм реализовать ? Постарался в начале описать более общую задачу, возможно, есть другие решения проблемы.
...
Рейтинг: 0 / 0
21.05.2006, 11:01
    #33740871
Рыжий Кот
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Единый справочник в распределенной базе ( ASA8, SQLRemote )
Код: plaintext
1.
2.
3.
4.
id char( 36 ) default uuidtostr(newid()),
it datetime default current utc timestamp,
ut datetime default utc timestamp,
primary key (id)
-- it - inserttime; ut - updatetime.
...
Рейтинг: 0 / 0
22.05.2006, 13:05
    #33742439
TIB
TIB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Единый справочник в распределенной базе ( ASA8, SQLRemote )
А справочник-то распределенный? (т.е. записи, созданные в базе А должны уходить в базу Б или же они реплицируются только в КБД?)
Если справочник распределенный (все "видят" друг друга) то
Но следующая репликация от базы Б. должна порождать ошибку и возвращать в базу Б. реплику, изменяющую первичный ключ у строки добавленной в базу Б. на значение , равное первичному ключу строки с таким же значением поля
работать не будет (нарушение целостности по Primary key) ... да и вообще - старайтесь не делять updat'ов по Primary key, тем более в распределенной БД.

Для решения проблемы можно воспользоваться триггерами - при вставке записи проверяешь ее на дубликат - и далее соответствующие операции

P.S. Можно также event'ами воспользоваться - вызывать периодически процедуру слияния задублированных записей...
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Единый справочник в распределенной базе ( ASA8, SQLRemote ) / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]