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

Вниз

временная база данных   Найти похожие ветки 

 
AVP_opck   (2004-01-13 08:57) [0]

во время выполнения программы нужно сохранять данные во временную базу данных. так чтобы с другой машины этапрограмма сохраняла временные данные в другую базу.
как в IB сделать эту временную базу?


 
Sergey13 ©   (2004-01-13 09:04) [1]

А потом ты будешь спрашивать как одновременно читать из разных баз? Зачем тебе именно база? Создай отдельную табличку, туда и пиши свои данные. Для работы нескольких пользователей в ней должно быть поле однозначно идентифицирующее сессию/юзера/еще что то. При использовании не забывать чистить эту таблицу.


 
Johnmen ©   (2004-01-13 09:04) [2]

Зачем во временную ?


 
AVP_opck   (2004-01-13 09:06) [3]

ДА да не базу конечно а табличку в базе
ну у меня запрос такой что я делаю промежуточный результат в базу а потом из этого результата еще запрос уже на форму в дбгрид
хм добавить поле. вобщем ваирант надо обдумать. а другие варианты есть?


 
AVP_opck   (2004-01-13 09:09) [4]

постоянно я таблицы базой обзываю.
понятно наверно что база одна.


 
Sergey13 ©   (2004-01-13 09:10) [5]

>а другие варианты есть?
Есть. Уйти на Оракл например. 8-)


 
Johnmen ©   (2004-01-13 09:12) [6]

>AVP_opck (13.01.04 09:06)

Именно другие варианты и имеют смысл. А всякие временные табл. - это от лукавого... Т.е. от недопонимания...:)


 
AVP_opck   (2004-01-13 09:19) [7]

ладно пойдем по пути внесения в таблицу имени компьютера с которого запускается прога.
и условно посчитаем что два раза ее там не запустят.


 
Johnmen ©   (2004-01-13 09:25) [8]

>...условно посчитаем что два раза ее там не запустят.

А что, безусловно никак ? :)))


 
Sergey13 ©   (2004-01-13 09:31) [9]

2Johnmen © (13.01.04 09:12) [6]
>А всякие временные табл. - это от лукавого... Т.е. от недопонимания...:)
Ну почему же? Это обычный инструмент которым надо с умом пользоваться. Вот и все. Индексы тоже могут вредить, если с ними работать без головы.


 
Johnmen ©   (2004-01-13 09:36) [10]

>Sergey13 © (13.01.04 09:31)

Не совсем понял насчет "обычного инструмента". "Обычный" для кого ? Или для чего ?


 
Sergey13 ©   (2004-01-13 09:50) [11]

2Johnmen © (13.01.04 09:36) [10]
>Не совсем понял насчет "обычного инструмента". "Обычный" для кого ? Или для чего ?

А чего непонятного? Есть индексы. Это инструмент для быстрого доступа к информации (в частности). Можно им пользоваться, а можно не пользоваться. Временные таблицы - такой же инструмент для увеличения производительности (например). Зачем, например, при многоразовом прогоне сложного запроса гонять его неизменную часть, если можно результаты загнать в вр.таблу и брать их от туда. Но как и любым инструментом, этим надо пользоваться не злоупотребляя.


 
Johnmen ©   (2004-01-13 10:10) [12]

>Sergey13 © (13.01.04 09:50)

Вот в IB нет механизма временных таблиц. И все живут, не тужат...
Далее ИМХО.
Временные таблицы - попытка облегчить "непродвинутому" разработчику жизнь.
Временные таблицы расхолаживают мыслительный процесс.
Любые проблемы можно решить без временных таблиц.


 
Жук ©   (2004-01-13 10:18) [13]


> AVP_opck (13.01.04 09:19) [7]
> ладно пойдем по пути внесения в таблицу имени компьютера
> с которого запускается прога.
> и условно посчитаем что два раза ее там не запустят.

При чём здесь ИБ ? При запуске приложения проверяйте запущено оно уже или нет...


 
Danilka ©   (2004-01-13 10:21) [14]

[12] Johnmen © (13.01.04 10:10)
Ну, вообще-то в ИБ много чего нет, например по сравнению с ороклом, например, нет пакетов, которые очень даже полезны.
А на счет временных таблиц для "непродвинутых", я их тоже сам не использую, в то-же время знаю людей которые активно их используют, и чей уровень считаю намного более "продвинутым" своего. :))
Например, если одну и ту-же задачу можно решить с помощью временной таблицы и без нее, но вариант с временной таблицей будет быстрее и дешевле для сервера, то почему-бы его не использовать?


 
Danilka ©   (2004-01-13 10:22) [15]

Кстати, а чем не временная таблица в ИБ, которая заполняется во время транзакции и всегда очищается перед коммитом? :))


 
Sergey13 ©   (2004-01-13 10:29) [16]

2Johnmen © (13.01.04 10:10) [12]
>Вот в IB нет механизма временных таблиц. И все живут, не тужат...
А вот Оракл, при всей своей навороечнности + PL/SQL, ввел таки с 8и поддержку временных таблиц. К чему бы это?

>Временные таблицы - попытка облегчить "непродвинутому" разработчику жизнь.
Как и индексы, ссылочная целостность, транзакции и прочая фигня. Вот раньше, помню, на клиппере, классно было. Как в песне "Ты знаешь - все в твоих руках". 8-)

>Временные таблицы расхолаживают мыслительный процесс.
Процесс расхолаживает также пиво, сигареты и женщины. Особенно все сразу и много. 8-)

>Любые проблемы можно решить без временных таблиц.
Если с ними проще, то почему нет?

Я лично не использую временные таблицы (даже при их наличии в Оракле), но не по религиозным мотивам, а потому что мне пока не надо.


 
Vemer ©   (2004-01-13 10:38) [17]

Постоянное чтение/запись/удаление из "временных" таблиц в IB к тому-же приведет к росту объема базы насколько я понимаю. На 100% согласен, что это "размягчает мозги". Без временных таблиц замечательно живется, только подумать надо и все. В IB есть View, есть хранимые процедуры, да и стандартный SQL из программы тоже неслабая вещь..


 
Johnmen ©   (2004-01-13 10:43) [18]

>Sergey13 © (13.01.04 10:29)
>...мне пока не надо.

Вот ключевая фраза !
И, вспомнив немного тервер, если долго "не надо", то почему вдруг станет "надо" ?
:)))))))))))

>Danilka © (13.01.04 10:21)
>...вариант с временной таблицей будет быстрее и дешевле для сервера...

Если в этом есть железная уверенность, то конечно...


 
Sandman25 ©   (2004-01-13 10:50) [19]

Ужасная ветка, я в шоке... Неужели вы никогда не сталкивались с тем, что приходилось извращаться всего лишь потому, что в выбранной СУБД нет временных таблиц?
Никто никогда не получал отчеты по нескольким выбранным участкам, по нескольким выбранным товарам, по нескольким выбранным молам, за несколько выбранных периодов??? Как вы в таком случае ограничиваете запрос? Используете динамический SQL??? Ограничиваете возможное число выбранных параметров путем (отчет по 1-3 участкам, например)?


 
Sergey13 ©   (2004-01-13 10:56) [20]

2Johnmen © (13.01.04 10:43) [18]
>если долго "не надо", то почему вдруг станет "надо" ?
Ну например, изменится направление работы. Я сейчас занимаюсь в основном оперативной информацией (подготовка производства). У меня мало здоровенных аналитических запросов. И поэтому мне пока не надо. Если начну заниматься аналитикой и прогнозированием, скорее всего придется применять.

2Vemer © (13.01.04 10:38) [17]
>приведет к росту объема базы
Диски сейчас стоят по доллару за гигабайт. 8-)

Я не утверждаю, что это идеальный инструмент для программирования БД. Я говорю что это равноправный с другими инструмент и ничего изначально предосудительного в его использовании нет.


 
Johnmen ©   (2004-01-13 10:59) [21]

>Sandman25 © (13.01.04 10:50)

Шокинг ? :) Это от чрезмерной впечатлительности...

>...???

Не понял...

А если уж надо что-то действительно черезж...ое, типа журнала операций etc, то всегда есть возможность написать ХП, или уж временную таблицу в памяти сделать...
И думаю, что это будет быстрее вр.тбл.


 
Johnmen ©   (2004-01-13 11:02) [22]

>Sergey13 © (13.01.04 10:56)

Конечно. Никто не предосуждает. Просто все высказывают свою т.з.


 
Sandman25 ©   (2004-01-13 11:09) [23]

[21] Johnmen © (13.01.04 10:59)

Я вижу, ты не совсем понял. Вот несколько примеров использования временных таблиц.

1. Пользователь выбирает что-нибудь (товары, молы, участки и т.д.), для которых хочет получить отчет. В хранимой процедуре стоит
select данные
from таблицы_данных t1,
временная_таблица_выбранных_участков t2,
временная_таблица_выбранных_молов t3,
временная_таблица_выбранных_товаров t4
where t1.участок = t2.id
and t1.мол = t3.id
and t1.товар = t4.id
При этом не важно, сколько участков, товаров, молов выбрал пользователь (0-бесконечность), он получит отчет по выбранным данным. Причем отчет может быть как суммарным, так и в разрезе того, что он выбрал. Как это сделать без временных таблиц? Напоминаю, что таблицы закрыты на select, а при склеивании нескольких view скорость падает в десятки раз.

2. Запускается ХП расчета данных для отчета. В отчете получается 8 таблиц результатов, данные из которых потом выводятся в клиенте. Все таблицы являются временными. Как получить результаты без временных таблиц, не запуская 8 хранимых процедур? Про ограничение View я уже писал. Кстати, в этой хранимой процедуре некоторые таблицы строятся с помощью использования других временных таблиц.

Насчет моей впечатлительности ты прав, но мне интересно, а как бы ты отреагировал, если бы прочитал: "Я не использую хранимые процедуры. Хоть их и ввели в последней версии Interbase, но мне они пока не нужны" :)

PS. Если примеров с таблицами мало, могу еще вспомнить :)


 
Zz_   (2004-01-13 11:10) [24]

>>Johnmen ©

Чтобы понять, зачем нужны временные таблицы,
и как они позволяют решать задачи не через заднее место,
советую решить пару упражнений с номерами от 90 и выше
на sql.ipps.ru


 
Sergey13 ©   (2004-01-13 11:14) [25]

2Johnmen © (13.01.04 11:02) [22]
>Просто все высказывают свою т.з.
Про размягчение могов непродвинутых программистов? Скажем так, не очень то корректное изложение своей Т.З.

ЗЫ:А вообще, ветка, ИМХО, здорово напрашивается на перемещение в "Потрепаться".


 
Johnmen ©   (2004-01-13 11:24) [26]

>Sergey13 © (13.01.04 11:14)
>Про размягчение могов ...

Ты меня с кем-то спутал...


 
Andriano   (2004-01-13 11:29) [27]

Что тут можно писать? Автору нужно экспорт, а тут сотни способов.

Пора уже ветку создать "на вкус и цвет..."


 
Sergey13 ©   (2004-01-13 11:33) [28]

2V2nmen © (13.01.04 11:24) [26]
Сори. Мысленно сложил твой пост [12] с Vemer © (13.01.04 10:38) [17] 8-)


 
Johnmen ©   (2004-01-13 11:52) [29]

>Zz_ (13.01.04 11:10) [24]
>советую решить пару упражнений с номерами от 90 и выше на sql.ipps.ru

Что-то не получается выбрать...:(

>Sandman25 © (13.01.04 11:09)

1. Не понял... ( размягчение мозга ? ) :)
2. Опять не понял... ( точно - оно :( , а так хотелось понять...)
:-)))


 
Desdechado ©   (2004-01-13 12:01) [30]

по сабжу:
Я временные таблицы не использую, поскольку можно в ХП сделать FOR SELECT любой сложности и вложенности, чтобы получить аналог этой самой временной таблицы.

А вот таблицы фиксированной структуры для временного хранения данных - приходится. Пример: рекурсивный разбор графа, хранимого списком ребер в БД. Чтобы не зациклиться, приходится уже пройденные ребра где-то складывать (в IB нет глобальных переменных, тем более массивов) для проверки. По завершению процедуры распутывания - очистка. Естественно, для каждого юзера свой ID в такой таблице.


 
Sandman25 ©   (2004-01-13 12:24) [31]

[29] Johnmen © (13.01.04 11:52)

Расширенные примеры

1.На клиенте выполняю
CREATE TEMP TABLE tmp_tovars(id INT);
Для всех записей, отмеченных пользователем в гриде, выполняю
INSERT INTO tmp_tovars(id) VALUES(:id);
Вызываю хранимую процедуру.
Она считает сумму по выбранным товарам:
SELECT SUM(A.price*A.amount)
FROM ostatki A,
tmp_tovars B
WHERE A.tovar_id = B.id

2. Отчет, считающие остатки на начало периода, расход, приход, и остатки на конец периода.

CREATE TEMP TABLE tmp_begin(tovar_id INT, amount INT);
CREATE TEMP TABLE tmp_end(tovar_id INT, amount INT);
CREATE TEMP TABLE tmp_prihod(tovar_id INT, amount INT);
CREATE TEMP TABLE tmp_rashod(tovar_id INT, amount INT);

INSERT INTO tmp_begin
SELECT ...;
INSERT INTO tmp_prihod
SELECT ...;
INSERT INTO tmp_rashod
SELECT ...;
INSERT INTO tmp_end
SELECT ...
FROM tmp_begin
UNION
SELECT ..
FROM tmp_prihod;
UPDATE tmp_end
SET ...
WHERE EXISTS (SELECT ... FROM tmp_rashod ...);
...
Получаем 4 таблицы для 4 гридов в результате 1 хранимой процедуры, причем остатки на конец периода посчитали по таблицам с движением, что может быть гораздо быстрее, чем прямой расчет по постоянным таблицам.


 
Johnmen ©   (2004-01-13 12:53) [32]

>Sandman25 © (13.01.04 12:24)

Если правильно понял, то для всего этого не нужны в.т.
Достаточно написать "правильную" ХП.
Вот с первой частью замечания Desdechado © (13.01.04 12:01) согласен. (По второй ничего не могу сказать...)


 
Desdechado ©   (2004-01-13 12:59) [33]

во второй части моего поста речь идет об обработке внутри ХП, ибо на клиенте такое делать мне кажется лишним


 
Vemer ©   (2004-01-13 13:02) [34]

To Sandman.

Пример 1 из (23) замечательно реализуеться UNION... а для выбранные можно отлично выбирать ..Where Select_Num > 0 (Select_Num - поле).


 
Vemer ©   (2004-01-13 13:03) [35]

To Sandman25
Сорри за ошибку в нике в предыдущем сообщении..


 
Sandman25 ©   (2004-01-13 13:04) [36]

[32] Johnmen © (13.01.04 12:53)

Достаточно написать "правильную" ХП.

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

Я, конечно, не спорю, что можно и без в.т. обойтись, но при таком подходе можно работать с сервером приложений и текстовыми файлами. Ведь тоже возможно, причем получится без триггеров, ХП, view, grant/revoke :)


 
Johnmen ©   (2004-01-13 13:09) [37]

>Desdechado © (13.01.04 12:59)

Просто по второй части твоего поста не берусь судить об эффективности применения вр.тбл. М.б. было бы достаточно длинной varchar для складывания рёбер...


 
Johnmen ©   (2004-01-13 13:15) [38]

>Sandman25 © (13.01.04 13:04)

Ну по первому можно вообще просто запросом. Динамически создаваемым.


 
MV   (2004-01-13 13:20) [39]

InterBase НЕ ПРЕДНАЗНАЧЕН для интеенсивной работы по изменению метаданных. (например, структуру одну таблички можно менять не более 255 раз до бэкап-ресторе). ПРоблема много раз обсуждалась уже давно решена: либо используй "этот ужасный динамический SQL", либо создай одну табличку на всех с идентификатором текущего подключения. Я обычто использую первый вариант. До InterBase использовал временные таблицы. Думаю, это было из-за слабого знания возможностей SQL.


 
Sandman25 ©   (2004-01-13 13:34) [40]

[38] Johnmen © (13.01.04 13:15)

Напоминаю, что все таблицы закрыты даже на select. Склейка View - очень медленно работает. Динамического SQL во многих СУБД нет, а если и есть, то он гораздо медленнее, чем "препарированная" ХП.
Если выбрать много товаров (почти все, например), то можно встретиться с ограничением на длину запроса (в MySQL что-то около 8000 символов).
Ладно, я понял "упрямство" оппонентов. Прекращаю спорить :)



Страницы: 1 2 вся ветка

Текущий архив: 2004.02.06;
Скачать: CL | DM;

Наверх




Память: 0.59 MB
Время: 0.021 c
14-16602
Hermit
2004-01-15 13:41
2004.02.06
Казино. Оазис-покер. Стрейт флеш


1-16430
snake2003
2004-01-22 12:43
2004.02.06
ComcoBox с изменением размера


14-16681
Mr.Fox
2004-01-16 03:52
2004.02.06
Чтение форумов


1-16507
Zheks
2004-01-27 10:31
2004.02.06
Вопрос про мьютексы


4-16786
closer
2003-12-02 16:15
2004.02.06
Закрытие таймера