Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-16309
Chuha
2004-01-25 16:56
2004.02.06
Прогрессия


14-16700
Igorek
2004-01-16 13:50
2004.02.06
А что, html код при скачивании не сжимается?


1-16441
Денис Евлентьев
2004-01-28 10:11
2004.02.06
Проблема с отображением поля типа dtGraphic в отчете Rave Report


14-16722
NeyroSpace
2004-01-16 13:03
2004.02.06
Вот заказал песню по РадиоРокс в ближайший час.


1-16216
PSA
2004-01-27 09:28
2004.02.06
Ох уж этот StringGrid





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский