Форум: "Базы";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
Внизвременная база данных Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.032 c