Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
4-79243
free
2003-09-25 23:04
2003.11.24
Нажатие клавишь


3-78767
Кщд
2003-11-05 08:11
2003.11.24
Рассылка сообщений сообщений подключенным к БД пользователям


1-78932
OlegL
2003-11-12 10:45
2003.11.24
Ресурс в .exe


4-79226
Raki
2003-09-02 18:00
2003.11.24
Путь к приложению


4-79222
Leks
2003-09-10 15:50
2003.11.24
Запуск программы с правами администратора





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский