powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Синхронизация иерархических таблиц между разными БД
25 сообщений из 31, страница 1 из 2
Синхронизация иерархических таблиц между разными БД
    #39524601
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Требуется переливать данные из иерархической таблицы одной БД в другую. Иерархия организована с помощью внешнего ключа на саму себя. Планирую в таблице в БД-приемнике создать суррогатный первичный ключ, а ID сущности из оригинальной БД хранить как неключевое поле. Как правильно спроектировать таблицу - иерархию реализовать через внешний ключ (то есть в качестве ключа использовать введенный суррогатный ключ) или хранить в строке ID родительской сущности из оригинальной БД (но тогда ограничение целостности нужно будет поддерживать вручную), либо вводить суррогатный ключ и вовсе не стоит, а стоит использовать в качестве первичного ключа значения первичного ключа из таблицы-источника?
...
Рейтинг: 0 / 0
Синхронизация иерархических таблиц между разными БД
    #39524624
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Interloper,

А в первичной таблице, надеюсь, ключ суррогатный?

Если так, зачем во вторичной добавлять еще один?

Или вы планируете передавать дерево как-то частично, так что во вторичной базе оно может быть не целостным?
...
Рейтинг: 0 / 0
Синхронизация иерархических таблиц между разными БД
    #39524632
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat Fisher,

В первичной таблице ключ суррогатный. Планируется передавать периодически обновления дерева. Есть вероятность, что возможно потом во вторичную таблицу будут литься данные из нескольких разных источников, тогда использование в качестве первичного ключа такового из первичной таблицы невозможно, так как приведет к коллизиям. Хотелось бы почитать про best practices в подобных задачах, чтобы понимать все pro и contra. Так-то понятно, что будет работать решение и с дополнительным суррогатным ключом и без него (если источник будет один), но желательно предвидеть подводные камни, которые таит в себе каждое из решений.
...
Рейтинг: 0 / 0
Синхронизация иерархических таблиц между разными БД
    #39524659
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда дерево - это вообще второй вопрос. Представьте, что у вас плоская таблица, и придумайте, что вы хотите сделать с ключами от разных источников.
...
Рейтинг: 0 / 0
Синхронизация иерархических таблиц между разными БД
    #39524793
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InterloperЕсть вероятность, что возможно потом во вторичную таблицу будут литься данные из
нескольких разных источников, тогда использование в качестве первичного ключа такового из
первичной таблицы невозможно, так как приведет к коллизиям.

1) Используй GUID в качестве ключа и коллизий не будет.
2) Используй deferred constraint и не будет проблем с внешним ключом при заливке.
3) Используй лог шиппинг и опять таки проблем с ключом не будет, ибо операции пойдут в том
же порядке, что и в первичной БД.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Синхронизация иерархических таблиц между разными БД
    #39524884
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

1) GUID я и планирую в качестве суррогатного ключа использовать, так как в базе-источнике тип ключа - INTEGER.
...
Рейтинг: 0 / 0
Синхронизация иерархических таблиц между разными БД
    #39524888
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Interloperв базе-источнике тип ключа - INTEGER.

Ты что, источник не проектируешь что ли, только консолидированную?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Синхронизация иерархических таблиц между разными БД
    #39525002
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Источник уже есть и я на него никак влиять не могу.
...
Рейтинг: 0 / 0
Синхронизация иерархических таблиц между разными БД
    #39525022
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InterloperИсточник уже есть и я на него никак влиять не могу.

Тогда идея с дополнительным ключом заведомо провальная. У тебя есть на выбор всего два
варианта:
1) Дополнительное поле во всех ключах, идентифицирующее БД-источник.
2) Таблицы соответствия ключей в источнике с ключом в консолидированной БД.

Выбор между ними зависит от софта, которым ты будешь информацию реплицировать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Синхронизация иерархических таблиц между разными БД
    #39525054
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Почему идея провальная?
...
Рейтинг: 0 / 0
Синхронизация иерархических таблиц между разными БД
    #39525097
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InterloperПочему идея провальная?

Ключ используется для идентификации записей. Если в источнике этого ключа нет, ты не
сможешь точно идентифицировать запись. Представь, что из двух баз пришли записи с ключом
12345. Ты можешь назначить им разный дополнительный ключ, но при последующей репликации
изменений из одной базы ты не сможешь определить какую из этих двух записей надо изменить.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Синхронизация иерархических таблиц между разными БД
    #39525566
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Так я храню ключ источника в своей таблице. Если появятся несколько источников, разумеется, придется так же хранить и инфо о таком, из какого источника пришла запись.
...
Рейтинг: 0 / 0
Синхронизация иерархических таблиц между разными БД
    #39526548
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InterloperТребуется переливать данные из иерархической таблицы одной БД в другую. Иерархия организована с помощью внешнего ключа на саму себя. Планирую в таблице в БД-приемнике создать суррогатный первичный ключ, а ID сущности из оригинальной БД хранить как неключевое поле. Как правильно спроектировать таблицу - иерархию реализовать через внешний ключ (то есть в качестве ключа использовать введенный суррогатный ключ) или хранить в строке ID родительской сущности из оригинальной БД (но тогда ограничение целостности нужно будет поддерживать вручную), либо вводить суррогатный ключ и вовсе не стоит, а стоит использовать в качестве первичного ключа значения первичного ключа из таблицы-источника?
вариант1 - используй в качестве ключа суррогатный ключ.
...
Рейтинг: 0 / 0
Синхронизация иерархических таблиц между разными БД
    #39526862
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InterloperТребуется переливать данные из иерархической таблицы одной БД в другую. Иерархия организована с помощью внешнего ключа на саму себя. Планирую в таблице в БД-приемнике создать суррогатный первичный ключ, а ID сущности из оригинальной БД хранить как неключевое поле. Как правильно спроектировать таблицу - иерархию реализовать через внешний ключ (то есть в качестве ключа использовать введенный суррогатный ключ) или хранить в строке ID родительской сущности из оригинальной БД (но тогда ограничение целостности нужно будет поддерживать вручную), либо вводить суррогатный ключ и вовсе не стоит, а стоит использовать в качестве первичного ключа значения первичного ключа из таблицы-источника?

"Шардируйте" ключи.
Т.е. выберите "шаг" ключа (обычно максимальное количество инстансов БД)
А потом для каждого инстанса задаете начальное значение + шаг.
Например предполагаем, что будет не более 3 инстансов. Тогда шаг ключа будет 3
Соответственно для 1-го инстанса будут ключи
1, 4, 7, 10 и т.д.
Для второго
2, 5, 8, 11 и т.д.
Для третьего
3, 6, 9, 12 и т.д.

Тогда вопросов с уникальностью и пересечением не будет :-)
...
Рейтинг: 0 / 0
Синхронизация иерархических таблиц между разными БД
    #39526890
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. выберите "шаг" ключаДостаточно сделать интервалы: с 1 до 100тыс, с 100тыс+1 до 200тыс. и т д.
Проще организовать автоинкременты.
...
Рейтинг: 0 / 0
Синхронизация иерархических таблиц между разными БД
    #39526961
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVТ.е. выберите "шаг" ключаДостаточно сделать интервалы: с 1 до 100тыс, с 100тыс+1 до 200тыс. и т д.
Проще организовать автоинкременты.

Не так удобно.
Так у нас на инстансах бесконечное множества.
А если делить по интервалам, то есть ограничение сверху.

А так все равно "автоинкремент" идет через сиквенс, а там можно сразу шаг указывать.
Единственное нужно руками прописать, а не через скрипт serial/bigserial
...
Рейтинг: 0 / 0
Синхронизация иерархических таблиц между разными БД
    #39526999
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если делить по интервалам, то есть ограничение сверху. Дык никто не мешает назначить новый интервал. Или сразу назначить интервал достаточной длины.
У вас скорее всего не тыща баз.
...
Рейтинг: 0 / 0
Синхронизация иерархических таблиц между разными БД
    #39527102
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVА если делить по интервалам, то есть ограничение сверху. Дык никто не мешает назначить новый интервал. Или сразу назначить интервал достаточной длины.
У вас скорее всего не тыща баз.

Зачем делать, когда можно не делать.
Сиквенс пишется один раз, а за интервалами придется следить :-)
...
Рейтинг: 0 / 0
Синхронизация иерархических таблиц между разными БД
    #39527128
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulТогда вопросов с уникальностью и пересечением не будет :-)

Тогда будут вопросы, когда "внезапно" окажется, что максимум баз вдруг стал 4, а не 3.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Синхронизация иерархических таблиц между разными БД
    #39527456
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulСиквенс пишется один раз, а за интервалами придется следить :-)Это почему еще за сиквенсами не нужно следить ?
Было 3 сиквенса: 1,4,7... / 2,5,8... / 3,6,9... И вдруг неожиданно нужно добавить еще один.
Можно конеш сделать с большим запасом. Дык и интервалы можно сделать с большим запасом.
...
Рейтинг: 0 / 0
Синхронизация иерархических таблиц между разными БД
    #39527529
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulНапример предполагаем, что будет не более 3 инстансов. Тогда шаг ключа будет 3
Соответственно для 1-го инстанса будут ключи
1, 4, 7, 10 и т.д.
Для второго
2, 5, 8, 11 и т.д.
Для третьего
3, 6, 9, 12 и т.д.


А как тогда выбрать запросом записи, например, только второго инстанса?
...
Рейтинг: 0 / 0
Синхронизация иерархических таблиц между разными БД
    #39527570
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat Fishermad_nazgulНапример предполагаем, что будет не более 3 инстансов. Тогда шаг ключа будет 3
Соответственно для 1-го инстанса будут ключи
1, 4, 7, 10 и т.д.
Для второго
2, 5, 8, 11 и т.д.
Для третьего
3, 6, 9, 12 и т.д.


А как тогда выбрать запросом записи, например, только второго инстанса?

Делением по модулю?! :-)
...
Рейтинг: 0 / 0
Синхронизация иерархических таблиц между разными БД
    #39527598
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulCane Cat Fisherпропущено...


А как тогда выбрать запросом записи, например, только второго инстанса?

Делением по модулю?! :-)

А соответствующий индекс получится построить? Или все подряд делить-молотить?
...
Рейтинг: 0 / 0
Синхронизация иерархических таблиц между разными БД
    #39527740
Interloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пока вопрос о нескольких инстансах не идет. Вопрос лишь в том, нормальная ли практика использовать в таблице, куда будут литься данные, новый суррогатный ключ для обеспечения иерархии.
...
Рейтинг: 0 / 0
Синхронизация иерархических таблиц между разными БД
    #39527763
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InterloperПока вопрос о нескольких инстансах не идет. Вопрос лишь в том, нормальная ли практика использовать в таблице, куда будут литься данные, новый суррогатный ключ для обеспечения иерархии.

Что-то мы по кругу пошли.

Q: Нужен ли суррогатный ключ для обеспечения иерархии?

A: Зачем вам дополнительный суррогатный ключ? Используйте тот что в льющихся данных.

Q: Главная проблема в том, что если данные будут литься из нескольких инстанций, их ключи будут совпадать. Но в то же время вопрос о нескольких инстансах не идет. Так нужен ли суррогатный ключ?
...
Рейтинг: 0 / 0
25 сообщений из 31, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Синхронизация иерархических таблиц между разными БД
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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