Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.24;
Скачать: CL | DM;

Вниз

Добавление в одну БД информации из другой   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.018 c
7-79201
kalliopiy
2003-09-16 14:58
2003.11.24
Windows XP


3-78852
Andrey V.
2003-11-06 07:59
2003.11.24
Поле типа DATE и значение NULL


3-78820
pashaz
2003-11-04 16:32
2003.11.24
Поля в DBGrid не редактируются???


1-78953
Вованчик
2003-11-12 07:56
2003.11.24
TreeView


3-78805
Peter
2003-11-05 10:32
2003.11.24
InterBase