Форум: "Базы";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];
ВнизДобавление в одну БД информации из другой Найти похожие ветки
← →
Disruptor (2003-11-04 13:23) [0]Есть общая база данных и распределенные пользователи, каждый из которых локально редактирует свои данные. Потом нужно связать эти данные воедино. Как лучше из проограммы пеерекинуть данные из одной БД в другую?
Спасибо.
← →
Zacho (2003-11-04 13:30) [1]Для начала почитай статьи по репликации на http://www.ibase.ru/develop.htm
← →
Alexandr (2003-11-04 13:36) [2]а потом подумай, а оно точно надо?
часто гораздо проще протянуть хоть какую-то связь
← →
Disruptor (2003-11-04 13:38) [3]В данном случае это НАДО. Пользователи находятся в разных городах и временами привозят инфу на дискетах.
← →
Vemer (2003-11-04 13:38) [4]Если данные сливаются в одну таблицу, то желательно поставить пользователям индекс через 100.000 например, чтоб потом не заморачиваться.
Еще можно создать дополнительное поле 2SmallInt Default 1" и триггер, который его возводит из 0 в 1 при изменении записи, тогда можно переливать только измененные/добавленные записи, а не всю таблицу. После перелива естественно сброс в 0.
Для подобного переливания я использую программу-насос, которая подключается к обеим базам и просто перебирает строки. Если включить буферизацию, 1000 строк примерно за 1 секунду перелетает.
← →
Zacho (2003-11-04 13:41) [5]
> Vemer © (04.11.03 13:38) [4]
> Если данные сливаются в одну таблицу, то желательно поставить
> пользователям индекс через 100.000 например, чтоб потом
> не заморачиваться.
Не надо так. Стандартное решение - ПК из 2-х полей.
← →
Disruptor (2003-11-04 13:43) [6]Главный вопрос в другом - с помощью каких компонентов подключиться сразу к двум базам данных?
← →
Zacho (2003-11-04 13:47) [7]
> Disruptor © (04.11.03 13:43) [6]
Естественно, с помощью 2-х TDatabase (или TIBDatabase, или что ты там используешь)
А статьи все-таки почитай.
← →
Disruptor (2003-11-04 13:50) [8]Уже частично почитал. Спасибо и простите дурака. Не додумался, что можно одноовремемнно две TDataBase открывать. При репликации я буду сначала узнавать максимаальный ID в таблице центрального узла, а потом сделаю апдейт в таблицах дочерних узлов, чтобы их ID был обязательно больше, чем в главной.
Ошибок быть не должно.
← →
Zacho (2003-11-04 13:55) [9]
> Disruptor © (04.11.03 13:50) [8]
Все-таки гораздо надежнее и удобнее ПК из 2-х полей. Первое - это номер узла, второе - первичный ключ из таблицы узла.
← →
Disruptor (2003-11-04 13:58) [10]Понял. Наверное - так и сделаю.
← →
Vemer (2003-11-04 14:19) [11]Уважаемые программисты, объясните зоотехнику пожалуйста, что такое ПК, и особенно из "двух полей", и как это связанно с объединением данных. Хочу программу правильно сделать.
← →
Zacho (2003-11-04 14:24) [12]
> Vemer © (04.11.03 14:19) [11]
ПК - это первичный ключ. Т.е. набор полей, значения которых уникально в пределах таблицы. Минимум может состоять из одного поля, максимум - из всех полей таблицы.
P.S. Крайне рекомендую к прочтению К.Дж.Дейт "Введение в системы баз данных" или другую хорошую книгу по теории РСУБД.
← →
Vemer (2003-11-04 15:04) [13]ПК использую, но назначить на 2 поля в голову не приходило.
То есть если я сделаю ПК из 2-полей, то внутри каждого столбца могут быть повторяющиеся значения, главное чтоб повторяющихся пар небыло?
To Zacho.
Ну нет у нас в городе книг таких. Даже по просто по IB нет.
Самотык и форум - основной источник моих знаний. Хорошо получилось ответил челу - сам чего-то нового узнал.
← →
Zacho (2003-11-04 15:43) [14]
> Vemer © (04.11.03 15:04) [13]
> ПК использую, но назначить на 2 поля в голову не приходило.
>
> То есть если я сделаю ПК из 2-полей, то внутри каждого столбца
> могут быть повторяющиеся значения, главное чтоб повторяющихся
> пар небыло?
Именно так.
А книгу хорошую все-таки найди. Закажи в каком-нибудь интернет-магазине, например. Понимаю, что дорого, но оно того стоит. Иначе постоянно будешь натыкаться на грабли, на которые уже натыкались задолго до тебя, и решать проблемы, которые уже давно решены.
← →
Disruptor (2003-11-05 07:36) [15]У меня еще один вопрос/запрос по теме: можно ли в рамках одного запроса сделать INSERT в одну базу данных с помощью SELECT из другой? Спасибо.
т.е. INSERT INTO DB1 .... SELECT ... FROM DB2...
← →
Zacho (2003-11-05 08:02) [16]
> Disruptor © (05.11.03 07:36) [15]
Нельзя. IB не поддерживает гетерогенные запросы.
← →
Deniz (2003-11-05 08:59) [17]>Zacho
А смысл использования 2-х полей в ПК? Может использовать искусственный ПК и уникальный индекс по 2-м ФК полям?
Проблемы искусственных и естественных ПК опять подняты :-)
← →
Zacho (2003-11-05 09:09) [18]
> Deniz © (05.11.03 08:59) [17]
А причем здесь FK ?
Смысл именно в том, что одно поле - это уникальный номер "внешней" БД (т.е. из которой берутся данные для репликации).
← →
Deniz (2003-11-05 09:21) [19]>Zacho © (05.11.03 09:09) [18]
>Смысл именно в том, что одно поле - это уникальный номер "внешней" БД (т.е. из которой берутся данные для репликации).
Это я понял, не так уж глуп :-)
Так вот смысл этот уникальный номер вставлять в ПК?
Привычно для IB делается
ID integer ... (PK + Generator + Trigger),
ID_OutBD integer,
ID_OutID integer (или как еще там нужно по задаче)
...
create unique index ... (ID_OutBD, ID_OutID)
← →
Zacho (2003-11-05 09:43) [20]
> Deniz © (05.11.03 09:21) [19]
Можно и так. Только зачем ? Здесь ID - абсолютно лишенее.
И все-таки, при чем здесь FK ?
← →
Deniz (2003-11-05 10:00) [21]Я так думаю у чела есть справочник(я бы точно сделал, очень много интересной информации можно держать по этому делу) по внешним ... как бы это обозвать ... базам, но наверное только ID_OutBD является ФК. В общем, автор молчит пока, там посмотрим что скажет.
← →
Disruptor (2003-11-05 10:33) [22]И нужно, чтобы это все делало приложение автоматически. У меня такой вариант. Открываем таблицу дочернего узла. Пробегаемся по ее записям. И для каждой из них на ходу генерируем INSERT для базы головного узла. И так для всех таблиц. Нормально? Или есть способ лучше?
У меня общая база. Ее набивает около 200 человек. Каждый - свои данные. Потом их нужно интегрировать, чтобы в центральном месте все эти данные корректно отображались и редактировались
← →
Disruptor (2003-11-05 11:00) [23]Кстати господа вы забыли про EXTERNAL TABLE - с помощью них вообще никакой боли
← →
Vemer (2003-11-05 15:17) [24]Вчера написал программу-насос, работающий через AppendRecord. Меньше возни с названиями полей.
← →
Zacho (2003-11-05 17:45) [25]
> Disruptor © (05.11.03 11:00) [23]
Да, по-моему тоже это - самый быстрый способ экспорта/импорта данных. Но не всегда приемлемый.
← →
Disruptor (2003-11-06 07:58) [26]Аминь. Оказывается - из этих таблиц не получается удалять данные. Придется генерировать скрипт при чтении из одной базы и потом запускать его для другой.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.009 c