Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 current user | last user Firebird<>ASA (Было: один триггер на несколько таблиц)  [new]
асёлъ
Member [заблокирован]

Откуда: ЯННП!
Сообщений: 17463
субшъ.
_
спасиба

++++++++++++++
замечание тебе, асёлъ.
7 фев 05, 14:18    [1304739]     Ответить | Цитировать Сообщить модератору
 Re: можна ле адинъ тригиръ на нескалька тоблицафъ павеседь?  [new]
Лентяй
Member

Откуда:
Сообщений: 2804
Нет
7 фев 05, 14:32    [1304822]     Ответить | Цитировать Сообщить модератору
 Re: можна ле адинъ тригиръ на нескалька тоблицафъ павеседь?  [new]
асёлъ
Member [заблокирован]

Откуда: ЯННП!
Сообщений: 17463
точна?
пичальна
но фсьо равно спасиба
7 фев 05, 14:34    [1304831]     Ответить | Цитировать Сообщить модератору
 Re: можна ле адинъ тригиръ на нескалька тоблицафъ павеседь?  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
асёлъ
точна?
пичальна
но фсьо равно спасиба

Если немножно вдумчиво подумать, то можно придти к ответу, что "можно". Для этого пишется ХП с нужной логикой, которая вызывается с триггеров нужных таблиц. Таким образом получаем повторно-используемое решение.
7 фев 05, 14:42    [1304872]     Ответить | Цитировать Сообщить модератору
 Re: можна ле адинъ тригиръ на нескалька тоблицафъ павеседь?  [new]
асёлъ
Member [заблокирован]

Откуда: ЯННП!
Сообщений: 17463
ASCRUS
асёлъ
точна?
пичальна
но фсьо равно спасиба

Если немножно вдумчиво подумать, то можно придти к ответу, что "можно". Для этого пишется ХП с нужной логикой, которая вызывается с триггеров нужных таблиц. Таким образом получаем повторно-используемое решение.
да йа такъ и делойу
проста интиресна была
а фдрукъ можна
7 фев 05, 14:43    [1304879]     Ответить | Цитировать Сообщить модератору
 Re: можна ле адинъ тригиръ на нескалька тоблицафъ павеседь?  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
Сделать можно все что угодно. Главное перед этим обосновать вопрос "А зачем ?" :)
7 фев 05, 14:48    [1304904]     Ответить | Цитировать Сообщить модератору
 Re: можна ле адинъ тригиръ на нескалька тоблицафъ павеседь?  [new]
Castor
Member

Откуда: moscow
Сообщений: 1103
ASCRUS
Сделать можно все что угодно. Главное перед этим обосновать вопрос "А зачем ?" :)

Мне такое было нужно чтобы во всех таблицах проставлялась дата последнего изменения записи. Причем при обновлении записи в любой таблице - дата должна меняться у всех. В рез-те сделал обновление даты при сохранении через клиентскую программу, хотя конечно правильнее сделать через ХП
7 фев 05, 17:28    [1305598]     Ответить | Цитировать Сообщить модератору
 Re: можна ле адинъ тригиръ на нескалька тоблицафъ павеседь?  [new]
hvlad
Guest
Castor
Мне такое было нужно чтобы во всех таблицах проставлялась дата последнего изменения записи. Причем при обновлении записи в любой таблице - дата должна меняться у всех. В рез-те сделал обновление даты при сохранении через клиентскую программу, хотя конечно правильнее сделать через ХП
А потом клиент переводит часы и...
7 фев 05, 17:44    [1305642]     Ответить | Цитировать Сообщить модератору
 Re: можна ле адинъ тригиръ на нескалька тоблицафъ павеседь?  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
Castor
ASCRUS
Сделать можно все что угодно. Главное перед этим обосновать вопрос "А зачем ?" :)

Мне такое было нужно чтобы во всех таблицах проставлялась дата последнего изменения записи. Причем при обновлении записи в любой таблице - дата должна меняться у всех. В рез-те сделал обновление даты при сохранении через клиентскую программу, хотя конечно правильнее сделать через ХП

Ну так нужно разработчиков FB попросить сделать такую полезную фичу, как в ASA:
CREATE TABLE Table1 (
  id int NOT NULL PRIMARY KEY,
  Create_User char(128) NOT NULL DEFAULT CURRENT USER,
  Update_User char(128) NOT NULL DEFAULT LAST USER,
  Create_Time datetime NOT NULL DEFAULT CURRENT TIMESTAMP,
  Update_Time datetime NOT NULL DEFAULT TIMESTAMP
);
В итоге при добавлении записи в Create_User и Last_User будет ведено имя пользователя, добавившего запись, а в Create_Time и Update_Time время создания записи. А вот при обновлении ASA автоматически обновит поля Update_User и Update_Time, в итоге в них будет уже имя последнего пользователя изменившего запись и время модификации этой записи. Очень удобно, а главное все делается автоматом и кодировать ничего не нужно :)
7 фев 05, 17:54    [1305671]     Ответить | Цитировать Сообщить модератору
 Re: можна ле адинъ тригиръ на нескалька тоблицафъ павеседь?  [new]
protector
Member

Откуда: Иваново, Россия
Сообщений: 600

ASCRUS

Ну так нужно разработчиков FB попросить сделать такую полезную фичу, как в ASA:
CREATE TABLE Table1 (
  id int NOT NULL PRIMARY KEY,
  Create_User char(128) NOT NULL DEFAULT CURRENT USER,
  Update_User char(128) NOT NULL DEFAULT LAST USER,
  Create_Time datetime NOT NULL DEFAULT CURRENT TIMESTAMP,
  Update_Time datetime NOT NULL DEFAULT TIMESTAMP
);
итоге при добавлении записи в Create_User и Last_User будет ведено имя пользователя, добавившего запись, а в Create_Time и Update_Time время создания записи. А вот при обновлении ASA автоматически обновит поля Update_User и Update_Time, в итоге в них будет уже имя последнего пользователя изменившего запись и время модификации этой записи. Очень удобно, а главное все делается автоматом и кодировать ничего не нужно :)

Ну так есть уже. Давно как есть...


Posted via ActualForum NNTP Server 1.1

7 фев 05, 19:14    [1305851]     Ответить | Цитировать Сообщить модератору
 Re: можна ле адинъ тригиръ на нескалька тоблицафъ павеседь?  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 30290
разработчиков FB ни о чем не нужно просить. current_user и current_timestamp есть.
В приведенном коде last_user не имеет смысла (это тот же current_user), а timestamp это вообще то тип столбца и писать надо опять же current_timestamp.

Если ты уверен, что в ASA так как ты написал, то кривовато это. из кода нигде не видно почему при insert должны автоматом заполниться только два поля, а при update - другие два.

Кстати, not null default x вообще то тоже под сомнением. потому что not null не разрешает передавать null. А default заменяет отсутствующее значение на указанное. вопрос в том - означает-ли отсутствие переданного значения null, или нет?

собственно, если бы я это делал, то сделал бы триггер на before insert для create столбцов (и не писал not null и default), а для двух столбцов update сделал бы before update триггер, в котором также прописал current_timestamp и current_user.
тогда достаточно было бы вызвать insert into table1 (n) и update table set id=id where id = :param
7 фев 05, 19:23    [1305868]     Ответить | Цитировать Сообщить модератору
 Re: можна ле адинъ тригиръ на нескалька тоблицафъ павеседь?  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 30290
проглядел, что стандартное название типа данных TIMESTAMP у вас не туда используется (а тип данных - datetime). Сочувствую.
7 фев 05, 19:24    [1305870]     Ответить | Цитировать Сообщить модератору
 Re: можна ле адинъ тригиръ на нескалька тоблицафъ павеседь?  [new]
protector
Member

Откуда: Иваново, Россия
Сообщений: 600

kdv

проглядел, что стандартное название типа данных TIMESTAMP у вас не туда используется (а тип данных - datetime). Сочувствую.

Да ну, брось. Это мелочи. И не такое бывает. Если не в названии, то в реализации.


Posted via ActualForum NNTP Server 1.1

7 фев 05, 20:09    [1305932]     Ответить | Цитировать Сообщить модератору
 Re: можна ле адинъ тригиръ на нескалька тоблицафъ павеседь?  [new]
Александр Гoлдун
Member

Откуда:
Сообщений: 2290
kdv
разработчиков FB ни о чем не нужно просить. current_user и current_timestamp есть.
В приведенном коде last_user не имеет смысла (это тот же current_user), а timestamp это вообще то тип столбца и писать надо опять же current_timestamp.

Если ты уверен, что в ASA так как ты написал, то кривовато это. из кода нигде не видно почему при insert должны автоматом заполниться только два поля, а при update - другие два.


Это видно из документации. CURRENT USER в ASA соответствет current_user в FB. Аналогично и CURRENT TIMESTAMP. А вот LAST USER и TIMESTAMP - это специальные default-значения, при назначении которых полям сервер автоматом выставляем их значения при апдейте.

kdv

Кстати, not null default x вообще то тоже под сомнением. потому что not null не разрешает передавать null. А default заменяет отсутствующее значение на указанное. вопрос в том - означает-ли отсутствие переданного значения null, или нет?


Если при insert явно указать null, то default не используется.

kdv

проглядел, что стандартное название типа данных TIMESTAMP у вас не туда используется (а тип данных - datetime). Сочувствую.


Чему сочувствуешь? timestamp и datetime в ASA один и тот же тип. Вполне можно и так написать:

CREATE TABLE Table1 (
  id int NOT NULL PRIMARY KEY,
  Update_Time TIMESTAMP NOT NULL DEFAULT TIMESTAMP
);
7 фев 05, 20:29    [1305966]     Ответить | Цитировать Сообщить модератору
 Re: можна ле адинъ тригиръ на нескалька тоблицафъ павеседь?  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
kdv
разработчиков FB ни о чем не нужно просить. current_user и current_timestamp есть.
В приведенном коде last_user не имеет смысла (это тот же current_user), а timestamp это вообще то тип столбца и писать надо опять же current_timestamp.

В приведенном примере в DEFAULT ключевые слова "LAST USER" и "TIMESTAMP" имеют очень большой смысл - они гарантируют, что значения полей, на которые они выставлены будут автоматически изменятся при каждом update записи. Это гораздо приятнее, чем писать триггера на таблицы или вставлять эти значения в ХП. Я вроде как обьяснил это в предыдущем сообщении, видимо не поняли.

kdv
Если ты уверен, что в ASA так как ты написал, то кривовато это. из кода нигде не видно почему при insert должны автоматом заполниться только два поля, а при update - другие два.

Я на 100% уверен про то, как надо писать в ASA на WatcomSQL :) И очень подробно обьяснил, почему при insert заполнятся все 4 поля, а при update только 2 поля из 4-х :)

автор
Кстати, not null default x вообще то тоже под сомнением. потому что not null не разрешает передавать null. А default заменяет отсутствующее значение на указанное. вопрос в том - означает-ли отсутствие переданного значения null, или нет?

Наоборот, очень даже логично - ставя NOT NULL я заявляю, что каждая запись должна иметь создателя и время создания, а так же последнего юзера изменившего запись и последнее время изменения. По стандарту SQL если в INSERT поля не указываются, то они заполняются с DEFAULT. В ASA ввели расширение этого стандарта, где DEFAULT LAST USER и DEFAULT TIMESTAMP автоматически обновляются значениями так же при UPDATE, если они явно не указаны в нем.

автор
собственно, если бы я это делал, то сделал бы триггер на before insert для create столбцов (и не писал not null и default), а для двух столбцов update сделал бы before update триггер, в котором также прописал current_timestamp и current_user.

Ну так никто и не спорит, что это можно сделать через BEFORE TRIGGER. Однако не делать лишний раз этот триггер на сотни таблиц гораздо удобнее и что то мне подсказывает эффективнее с точки зрения производительности INSERT и UPDATE :)

автор
тогда достаточно было бы вызвать insert into table1 (n) и update table set id=id where id = :param

именно так и достаточно :)

автор
проглядел, что стандартное название типа данных TIMESTAMP у вас не туда используется (а тип данных - datetime). Сочувствую.

Спасибо за сочувствие :) В ASA - DATETIME стандартный домен на базе нативного типа TIMESTAMP. Сделан для совместимости с MSSQL2000 и Sybase ASE, в которых до сих пор даже нет отдельных типов DATE и TIME. В примере я его привел только чтобы облегчить понимание фичи и не вносить путаницу, т.е. можно было бы написать и так:
Update_Time TIMESTAMP DEFAULT TIMESTAMP
но как оказалось меня все таки не правильно поняли :)

P.S. В общем честно сказать я просто хотел очередной раз хотел показать, что негоже сидеть в своей траншее и размахивать флагом "Interbase". Фичи, приведенные мною достаточно удобные и здорово мне помогают для реализации контроля доступа и логирования по записям таблиц, если они есть в FB, то извиняюсь за незнание и бесполезный совет, если нет, то нужно оценить их пользу и возможно реализовать, а не начинать тут же кидать фразами "Мы и так можем сделать", "Нам это не нужно" и т.д. и т.п. Я могу твердо заявить, что с точки зрения самых полезных фич различных СУБД в SQL для ASA реализовано почти все, ее разработчики не гнушаются брать лучшее и всегда прислушиваются к мнению своих пользователей. Наглядный пример - сейчас активно на их форуме "ASA futures" идет обсуждение реализации фичи "TOP -Value", где проектировщик БД, который работает и на Оракле предложил заложить в функциональность SELECT TOP поддержку отрицательных значений, что означает выбрать не первые сколько то записей, а последние сколько то записей. Мотивируется это тем, что при сборе динамического SQL это гораздо удобнее, чем дополнительно играться с ORDER BY ASC/DESC. Вполне возможно эта фича при благоприятном исходе обсуждения будет реализована в ASA через пару месяцев, если на это подпишется достаточно народу.
8 фев 05, 00:24    [1306163]     Ответить | Цитировать Сообщить модератору
 Re: можна ле адинъ тригиръ на нескалька тоблицафъ павеседь?  [new]
Александр Гoлдун
Member

Откуда:
Сообщений: 2290
ASCRUS

Я могу твердо заявить, что с точки зрения самых полезных фич различных СУБД в SQL для ASA реализовано почти все, ее разработчики не гнушаются брать лучшее и всегда прислушиваются к мнению своих пользователей. Наглядный пример - сейчас активно на их форуме "ASA futures" идет обсуждение реализации фичи "TOP -Value", где проектировщик БД, который работает и на Оракле предложил заложить в функциональность SELECT TOP поддержку отрицательных значений, что означает выбрать не первые сколько то записей, а последние сколько то записей. Мотивируется это тем, что при сборе динамического SQL это гораздо удобнее, чем дополнительно играться с ORDER BY ASC/DESC. Вполне возможно эта фича при благоприятном исходе обсуждения будет реализована в ASA через пару месяцев, если на это подпишется достаточно народу.


У FB тоже есть разработчики :) и даже из России. Активно участвуют в обсуждении фич в форуме и открыты для предложений. Но ресурсов у opensource проекта FB IMHO меньше чем у коммерческого ASA, а наследие более тяжелое и кривое. Полезные мелочи - это хорошо. Но это мелочи, которыми стоит заняться после решения более важных проблем сервера. По мне так гораздо интереснее иметь нормальный оптимизатор, инкрементальный бэкап (будет в FB2), transaction log (сейчас скажут что нафиг не нужно либо очень сложно) и еще возможность распараллеливания между несколькими процессорами при общем кэше. Триггеры в таком случае не влом действительно вручную прописать.
8 фев 05, 10:20    [1306647]     Ответить | Цитировать Сообщить модератору
 Re: можна ле адинъ тригиръ на нескалька тоблицафъ павеседь?  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 30290
to ASCRUS: не перегибай палку, ОК? мне уже эта реклама ASA просто надоела, ты по-моему уже давно перешел все границы разумного. Чуть что - сразу начинается песня про то как в ASA замечательно, и вот неплохо было бы FB у него позанять фишек. Нет, извини, дерьмовый ты синтаксис привел, вот такие мои ощущения (и от синтаксиса и от подобной логики).

Так что будь добр, хочешь пообсуждать ASA - давай сделаем это в другом месте. Если и дальше будешь именно здесь на ASA кивать без повода - честное слово, не люблю жаловаться, но уговорю модератора отрубить тебя от этого форума.
8 фев 05, 10:42    [1306748]     Ответить | Цитировать Сообщить модератору
 Re: можна ле адинъ тригиръ на нескалька тоблицафъ павеседь?  [new]
Amris Mirddin
Member

Откуда: Питер
Сообщений: 2379
ASCRUS

Я на 100% уверен про то, как надо писать в ASA на WatcomSQL :) И очень подробно обьяснил, почему при insert заполнятся все 4 поля, а при update только 2 поля из 4-х :)


И нафига тогда все эти мудрствовования с last user? Это эквивалентно заданию апдейтной пары с теми же default, что и инсёртной. Это искажение сути мне, например, нафиг не надо, апдейтные поля должны заполняться только при апдейте, а при нтсёрте оставаться нуллами. Триггером. А инсертные - через default. Вот если бы такой синтаксис позволял генерировать на автомате апдейтный триггер - это другое дело. Но это а) мелочь, решаемая собственным автоматом генерирования стандартных триггеров б) поднимает проблемы с позицией такого триггера (надо ещё подумать, в какой момент эти поля должны заполняться и при создании других триггеров того же типа на этой таблице об этом помнить). Так что имхо автомат на клиенте удобнее. Я создаю им болванки триггеров, которые потом дописываю ручками перед созданием если надо. Чтоб без необходимости разнесения функций по позициям триггеров всё было в одном триггере и в той строке, где мне это нужно.

ASCRUS

P.S. В общем честно сказать я просто хотел очередной раз хотел показать, что негоже сидеть в своей траншее и размахивать флагом "Interbase".


В прошлый раз я отреагировал спокойно, даже на то, что ты не отреагировал на реплики о том, что некоторые вещи, о которых ты говоришь, в FB есть и без всяких дополнительных нестандартных функций. В этот раз уже даже мне это начинает казаться спамом. Прежде чем что-то рекламировать в чужом огороде, надо бы об этом огороде поиметь некоторое представление.
8 фев 05, 12:12    [1307171]     Ответить | Цитировать Сообщить модератору
 Re: можна ле адинъ тригиръ на нескалька тоблицафъ павеседь?  [new]
Amris Mirddin
Member

Откуда: Питер
Сообщений: 2379
Александр Гoлдун
.


Честно говоря, я думал что ASCRUS - это твой ник здесь. Приятно было ошибиться :)
8 фев 05, 12:14    [1307184]     Ответить | Цитировать Сообщить модератору
 Re: можна ле адинъ тригиръ на нескалька тоблицафъ павеседь?  [new]
ASCRUS
Member

Откуда: МО Электросталь
Сообщений: 5994
Гм, большое сорри всем за спам. Никого не хотел обидеть и уж боже упаси навязать рекламу ASA, тем более за бесплатно, извините что не так поняли. Всегда рад буду встрече на форумах Sybase и Сравнение СУБД обсудить полезные фичи разных СУБД, если у кого будет желание рассказать, что есть полезного в Interbase и чего не хватает в ASA, так как думается мне расширение кругозора никогда не повредит :)

P.S. Становлюсь верным читателем этого форума, не мешая писателям, всем удачи.

Posted via ActualForum NNTP Server 1.1

8 фев 05, 12:57    [1307414]     Ответить | Цитировать Сообщить модератору
 Re: можна ле адинъ тригиръ на нескалька тоблицафъ павеседь?  [new]
SSY
Member

Откуда: Москва
Сообщений: 198
IMHO, писать в таблицу логин пользователя довольно опасно, особенно в FB (в других серверах, где security встроено в саму базу, - тоже, но меньше). Неизвестно, что там дальше будет с этими логинами. Лучше отдельную табличку пользователей завести и её IDшники уже использовать (и место можно немного сэкономить). А это значит, что примочки как в ASA тут не пригодятся.

Как сделать один триггер на несколько таблиц я вообще слабо себе представляю. Там же в каждом случае - свой контекст, а ещё легко нарваться на рекурсию и, наверное, других подводных камней полно. Так что такое упрощение может на самом деле всё наоборот усложнить. Лучше ну его нафих.
8 фев 05, 13:05    [1307457]     Ответить | Цитировать Сообщить модератору
 Re: можна ле адинъ тригиръ на нескалька тоблицафъ павеседь?  [new]
Александр Гoлдун
Member

Откуда:
Сообщений: 2290
Amris Mirddin
Александр Гoлдун
.


Честно говоря, я думал что ASCRUS - это твой ник здесь. Приятно было ошибиться :)

Мы с вами знакомы? А, привет, Дед! ;)
Я уже давно с вами общаюсь и в курсе, насколько ревностно ДК относится к опекаемому продукту, поэтому стараюсь особо не вступать в полемику. (Бейсбольная бита с надписью FB - опасная штука :) Хотя скорее всего знаком с FB гораздо лучше чем ASCRUS и имею бОльшую базу для объективного сравнения. Но абстрактно доказывать что-то не хочу. Спросят - отвечу, увижу глубокое по моему мнению заблуждение - может поправлю. Время дорого.
ASCRUS и правда немного перегнул, а вот Диме imho стОит взять пример хладнокровия с тезки.
В общем, давайте жить дружно и без фанатизма.
8 фев 05, 13:17    [1307563]     Ответить | Цитировать Сообщить модератору
 Re: можна ле адинъ тригиръ на нескалька тоблицафъ павеседь?  [new]
Александр Гoлдун
Member

Откуда:
Сообщений: 2290
ASCRUS
Всегда рад буду встрече на форумах Sybase

Один из разработчиков FB там регулярно бывает.
ASCRUS

P.S. Становлюсь верным читателем этого форума, не мешая писателям, всем удачи.

Этот форум - imho не самое лучшее место про FB. Глянь хотя бы в тему этой ветки.
8 фев 05, 13:58    [1307775]     Ответить | Цитировать Сообщить модератору
 Re: можна ле адинъ тригиръ на нескалька тоблицафъ павеседь?  [new]
Amris Mirddin
Member

Откуда: Питер
Сообщений: 2379
Александр Гoлдун

Этот форум - imho не самое лучшее место про FB. Глянь хотя бы в тему этой ветки.


Тут очень неровно. Иногда бывают даже вопросы, в которые не суёшься потому что не владеешь и читаешь с интересом, а потом как заколодит на несколько дней юмора в коротких штанишках по причине тотального игнорирования доки ;) Причём на одну и ту же тему и одни и те же вопросы косяком. Но это везде бывает, в другом месте просто поменьше. А тема - да... Я на неё несколько дней внимания не обращал из принципиальных соображений, а потом смотрю - что-то уж больно активно выскакивает наверх :)
8 фев 05, 14:25    [1307886]     Ответить | Цитировать Сообщить модератору
 Re: можна ле адинъ тригиръ на нескалька тоблицафъ павеседь?  [new]
SSY
Member

Откуда: Москва
Сообщений: 198
Предлагаю "переименовать" ASA в A$A. Так все постоянно будут помнить о том, чем он хуже FB.
8 фев 05, 14:40    [1307940]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Сравнение СУБД Ответить