powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / MySQL и Firebird для Web
25 сообщений из 287, страница 10 из 12
MySQL и Firebird для Web
    #36781792
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladvadiminfohvladЕсли вы не в состоянии понять, о чём идёт посторонний диалог, может не стоит в него встревать ?

Ну а что Вы хотели? - здесь же всех на форум допускают. Я не понимаю что Вы говорите, Вы не понимаете что Вас спрашуют. Это по философски все получается. Согласен.

Но особенно "по философски" выглядят ценные фразы вроде этой:
vadiminfoнаверное, от этого должно ломать.

vadiminfoВпрочем, кое-что то я понял для себя: сторонником только процедур быть хуже, чем сторонником только Оракла. Так что я не зря встрял: инфу нужную получил.Вот этого вы не понимаете - вы выискиваете, чем бы померяться, а суть не в этом.
Ну вам сторонникам только процедур виднее. Однако, думаю, что этого все еще не достаточно, чтобы становиться таковым сторонником. Думау, пока юзать все возможности СУБД, но в первую очередь язык БД. Вплоть до выяснения новых обстоятельств, про которые не лень буит рассказвать сторонникам.
...
Рейтинг: 0 / 0
MySQL и Firebird для Web
    #36781862
Фотография artemana
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfo, спокойней.
У нас вся система построена на триггерах (их больше 10 000). Там есть все и сервис (первичные ключи, простые проверки) и сложная бизнес логикак, и различное логирование. Но я представляю как можно было бы построить эту систему и без них, только на процедурах. Общая концепция такова, всем пользователям и ролям, запрещаются любые операции редактирования таблиц. Вместо этого на каждую необходимую операцию (insert,delete,update) создается процедура, в которой пишется сама операция редактирования плюс обрамляющий ее код (аналоги триггеров). В пределе таких процедур создается N*3, где N количество таблиц. Каждой процедуре даются права на операции редактирования таблиц. Пользователям и ролям даются права процедуры. В клиентском приложение операции редактирования перенаправляются с команд (insert, delete, update) на вызовы соответствующих процедур. Ранее упомянутый обрамляющий код в них, как и в случае триггеров, может состоять как из обычных ddl команд, так и из вызовов процедур.
Аргументов в пользу такого подхода высказываются следующие:
1. Система на процедурах более понятна, так как в триггерах люди часто так запутывают логику, что не поймешь какое из каксадных событие привело к чему. На мой взгляд аргумент слабый, так как каскад вызываемых процедур, запутывается профанами не менее легко. При правильном общем стиле программирование проблем не должно возникать ни там, ни там. И наоборот при неправильном, проблему будут в обоих подходах.
2. Решение определенных проблем безопасности. Тут подробности я не помню. Возможно, речь идет о закрытие каких либо дырок, но может и нет.
3. Дополнительный уровень абстракции. Ну это на любителя. Есть свои плюсы и минусы.
...
Рейтинг: 0 / 0
MySQL и Firebird для Web
    #36781877
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итак пошел холивар ХП vs пярмые селекты в приложении??

Огорчу: ХП. Так как:
1) расносятся роли БДА/Писателя запросов(некоторые это исключаю из ДБА, а некоторые вносят) и Программиста клиентской части.
2) Появившийся слой абстракции позволяет настроить безопастность более гибко.

Из своей практики с Постгре:
Есть одна схема api, в которую может смотреть public(все пользователи) или application_user(группа пользователей). В этой схеме вынесены только заглушки в другие схемы и выглядит это примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE OR REPLACE FUNCTION api.<real_schema>_<function_name>(<params>) RETURNS [SETOF] RECORD | <data_type> AS $BODY$
BEGIN
    RETURN QUERY SELECT * FROM <real_schema>.<function_name>(<params>);
END;
$BODY$ LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER;

ALTER FUNCTION api.<real_schema>_<function_name>(<params>) SET OWNER 'application_inner';
Отчасти в Пг это сделано потому что если ты даешь возможность USAGE на схему и EXECUTE на процедуру, то ты можешь увидеть содержимое этой процедуры. Тут, насколько я знаю, Пг проигрывает Ораклу и довольно-таки сильно.
Отчасти это сделано из-за SECURITY DEFINER. То есть вызов процедуры из реальной схемы уже идет с правами другой группы, которая может работать с схемами, таблицами и внутренними процедурами. Обычно основная логика концентрируется именно тут. На триггеры-же практически ничего не вешается, кроме логгирования и вызова нотификаций.

В качестве расширения этой технологии, обычно в api процедуры еще добавляют верификацию пользователя. Но это больше для веб приложений или приложений с расширенной системой ролей и прав.
...
Рейтинг: 0 / 0
MySQL и Firebird для Web
    #36781884
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfoGluk (Kazan)Сторонники процедур не открывают DML напрямую.
Некоторые сторонники не открывают даже select (но я к ним не отношусь)
Не совсем понял. Я думал из контекста предыдущего процедуры противопоставляются триггерам. Но мож я не все прочитал? А как стронники процедур получают доступ к данным, и как их модифицируют?

Нельзя противопоставлять теплое мягкому, но можно вести разработку, в частности, так, что триггеры (в основном) не будут нужны. Подчеркну, я не призываю фанатично отказываться от использования триггеров. Просто у них есть минусы, знать о которых необходимо.
...
Рейтинг: 0 / 0
MySQL и Firebird для Web
    #36781887
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artemana В пределе таких процедур создается N*3, где N количество таблиц.4, как минимум. Полный CRUD + что-нибудь типа sign и любые другие действия над сущностью, типа провода документа и т.д.
...
Рейтинг: 0 / 0
MySQL и Firebird для Web
    #36781895
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А... пардон... Холивар триггеры vs хп...

По удобству, на самом деле - больше "как привык":
1) Триггеры - систему строили от данных, то есть от таблиц и т.д.
2) ХП - систему строили от объектов и методов над ними.

Оба подхода имеют право на существование, 2-й подход ИМХО более ООП-style. Потом мне, как разработчику всего комплекса - удобнее.
...
Рейтинг: 0 / 0
MySQL и Firebird для Web
    #36781908
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladПримеры не совсем равноценны. В первом варианте row-level триггеры, во-втором statement-level, так сказать.
Если бы в ORACLE были аналоги таблиц inserted\deleted из T-SQL (а может уже есть ?), то первый вариант можно было бы переписать с их использованием,
чтобы добиться более полной аналогии со-вторым.


Разумеется. Речь не идет о том, что есть способ механически переделать одно в другое.
Просто есть разные способы вести разработку. При некоторых методах разработки, триггеры становятся не очень нужны. У этих метод есть сторонники и противники, плюсы и минусы ...

Что до statement-триггеров, из них нельзя получить список измененных строк, с :old и :new значениями. Собственно упомянутый способ обхода мутации заключается в сохранении этой информации в row-level before триггере, с последующей отработкой в statement after триггере.
Но переключений контекстов получается немерянно.

hvlad
Для себя я вижу тут два основных вывода:
а) переключение PL\SQL <-> SQL имеет место быть и стоит не дёшево, поэтому принято экономить на таких переключениях
б) в Firebird эта проблема стоит гораздо менее остро, т.к. нет таких переключений. Есть только обычные затраты на вызов PSQL процедуры\тригера
(передача параметров и т.п.)

Именно так. Это специфика Oracle
...
Рейтинг: 0 / 0
MySQL и Firebird для Web
    #36781910
Фотография Mexanik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexPhilMexanik,

Главное понять, для чего это всё нужно.

На Delphi + FB в части клепания сайтов денег не заработаешь, однозначно.
На PHP + MySQL будет большая конкуренция "студентов", зато .
На ASP .NET + MS SQL не будет большого объема халтуры (хотя найти можно, в том числе и по шарепоинту) за то
За Java денег хорошо платят, особенно если от сайтостроительства отойти:)

Это нужно для разового решения одной задачи - сделать общую базу данных для нескольких филилалов, разбросанных по городам (сбор заявок на услуги, контроль исполнения и прочая небольшая чушь). В веб проектирование ударяться глобально не собираюсь и этот проект раскручивать тоже не думаю.... Клиент поговаривает о собственном веб-узелке, на который можно напихать необходимых сервисов. Теперь подход к задаче не выглядит таким извратным?
...
Рейтинг: 0 / 0
MySQL и Firebird для Web
    #36781915
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv
да Вы идеалист. Можно подумать, что на Оракле говнокод не пишут. Еще как, не сомневайтесь, я абсолютно уверен в этом.

пишут, чего тут сомневаться. но в отличие от ФБ оракл в некоторых ситуациях самостоятельно может не позволить лабателю написать очередной говнокод. вот и яркий пример - ты и твои собратья по несчастью Firebird не поняли даже после моего разжевывания в чем опасность так и продолжите лабать говнокод, а вот оракл меня как ДБА защитит от такого говокода механизмом защиты от мутации. в этом и разница.

kdvкакой еще в дуду "порядок"... может, в оракле привыкли пользоваться rownum, я не знаю, но у людей, использующих FB, привычки к "порядку строк" нет, потому что в SQL тоже порядок строк не гарантируется (кроме сортировок order by).
по моему я достаточно разжувал ...
...
Рейтинг: 0 / 0
MySQL и Firebird для Web
    #36781922
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad
Слово "атомарность" выше было употреблено не по назначению. Правильнее говорить о statement-level consistency.
Кстати, в стандарте я этого термина не нашёл. Но, так как он уже неоднократно употреблялся здесь, я надеюсь у нас не будет разночтений в его интерпретации.

Так вот, statement-level consistency, насколько я помню, не диктуется стандартом, а оставляется на усмотрение производителя.
Я говорю о такой характеристике курсора, как sensitivity , которая, если не указано явно, является ASENSITIVE (секция 4.32 Cursors).
Если есть другие ссылки на стандарт - буду рад ознакомиться.

Так что формально read-committed в Firebird работает правильно, ибо речь в его определении идёт только о допустимых феноменах.

Другой вопрос, что вы привыкли к оракловому пониманию statement-level consistency для RC :)

Возможно я неправ, но для меня немножко дико видеть изменения, выполненные другой транзакцией не целиком. Да, та транзакция была выполнена атомарно, но то что она наизменяла, мы таковым не видим, со всеми возможными вытекающими ...
...
Рейтинг: 0 / 0
MySQL и Firebird для Web
    #36781983
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)Просто есть разные способы вести разработку. При некоторых методах разработки, триггеры становятся не очень нужны. У этих метод есть сторонники и противники, плюсы и минусы ...Согласен

Gluk (Kazan)Что до statement-триггеров, из них нельзя получить список измененных строк, с :old и :new значениями. Собственно упомянутый способ обхода мутации заключается в сохранении этой информации в row-level before триггере, с последующей отработкой в statement after триггере.Я знаю :)

Gluk (Kazan)Именно так.COMMIT
:)

Gluk (Kazan)Это специфика OracleИменно. Каждый имеет право на специфику. В разумных пределах :)
...
Рейтинг: 0 / 0
MySQL и Firebird для Web
    #36781995
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)Возможно я неправ, но для меня немножко дико видеть изменения, выполненные другой транзакцией не целиком. Да, та транзакция была выполнена атомарно, но то что она наизменяла, мы таковым не видим, со всеми возможными вытекающими ...Ну так никто не заставляет пользоваться rc там, где нужен snapshot.
Тем более, что snapshot в Firebird/Interbase был изначально и является уровнем изоляции по-умолчанию.
Всё остальное - дело вкуса, привычек и специфики, если не оговорено стандартом.
...
Рейтинг: 0 / 0
MySQL и Firebird для Web
    #36782004
protector
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)
Ну шо я могу сказать ... фигово ты знаешь Oracle. Этому финту первым делом
студентов учат

Собственно упомянутый способ обхода мутации заключается в сохранении этой
информации в row-level before триггере, с последующей отработкой в statement
after триггере.
Но переключений контекстов получается немерянно.


"И эти люди запрещают мне ковырять в носу" (с) Назвать подобный бред
решением проблем с мутацией... Ну не знаю. Разработчику, кторый даже
подумает об этом - отрывать руки, а уж тем кторые "студентов учат"
растрелиивать на месте. Однозначно.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
MySQL и Firebird для Web
    #36782015
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)
Нельзя противопоставлять теплое мягкому, но можно вести разработку, в частности, так, что триггеры (в основном) не будут нужны. Подчеркну, я не призываю фанатично отказываться от использования триггеров. Просто у них есть минусы, знать о которых необходимо.
На практике, я вседа пытаюсь предупреждать проггеров, чтобы не писали триггеров из каких-то идей оптимизации приложения, под тем предолгом, что это применение средств не по назначению. Однако, если процедукра должна запускаться на событие БД, например, таково типа бизнес правило, то для этого триггер подходит, скорее всего, луче всего. Исключение триггеров где они могли бы быть на своем месте тоже может нести риски увеличения энтропии программного обеспечения.
...
Рейтинг: 0 / 0
MySQL и Firebird для Web
    #36782019
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!
собратья по несчастью Firebird не поняли даже после моего разжевывания в чем опасность так
и продолжите лабать говнокод, а вот оракл меня как ДБА защитит от такого говокода
механизмом защиты от мутации.

Забавно, что преподаватели, о которых упоминал Глюк тоже не понимают в чём опасность и по
его же словам расказывают всем студентам как им обойти заботливые защитные механизмы.
Чтобы эти студенты тоже могли лабать говнокод.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
MySQL и Firebird для Web
    #36782096
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
protectorGluk (Kazan)
Ну шо я могу сказать ... фигово ты знаешь Oracle. Этому финту первым делом
студентов учат

Собственно упомянутый способ обхода мутации заключается в сохранении этой
информации в row-level before триггере, с последующей отработкой в statement
after триггере.
Но переключений контекстов получается немерянно.


"И эти люди запрещают мне ковырять в носу" (с) Назвать подобный бред
решением проблем с мутацией... Ну не знаю. Разработчику, кторый даже
подумает об этом - отрывать руки, а уж тем кторые "студентов учат"
растрелиивать на месте. Однозначно.

Posted via ActualForum NNTP Server 1.4

Ok, твое решение проблемы???
...
Рейтинг: 0 / 0
MySQL и Firebird для Web
    #36782097
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
protectorНазвать подобный бред решением проблем с мутацией...

Так уже неоднократно сказали, что это не решение, а обход проблемы. Т.е. забивается болт
на встроенную в Oracle версионность и на коленке ляпается свой суррогат оной. Что и
приводит нас обратно к моему вопросу: когда Оракул научится использовать версионность для
искоренения мутаций. Ответ - никогда.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
MySQL и Firebird для Web
    #36782111
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Yo.!
собратья по несчастью Firebird не поняли даже после моего разжевывания в чем опасность так
и продолжите лабать говнокод, а вот оракл меня как ДБА защитит от такого говокода
механизмом защиты от мутации.

Забавно, что преподаватели, о которых упоминал Глюк тоже не понимают в чём опасность и по
его же словам расказывают всем студентам как им обойти заботливые защитные механизмы.
Чтобы эти студенты тоже могли лабать говнокод.


Ты просто нефтеме
...
Рейтинг: 0 / 0
MySQL и Firebird для Web
    #36782300
Yo.!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gluk (Kazan)

Ok, твое решение проблемы???

я уже лет 10 не сталкивался с тригерами, но по моему обычно все таки учат в row-level before сохранять во времянку или pl/sql табличку, а писать в таблу уже statement тригером.

Dimitry Sibiryakov
когда Оракул научится использовать версионность для
искоренения мутаций. Ответ - никогда.

т.е. один раз сесть в лужу на вопросе как ты себе представляешь использование версионности для искоренения мутации тебе было не достаточно. что же прошу снова в туже лужу или может на этот раз ты нам поведаешь свою болезенную фантазию как версионность могла бы тут помочь ?
...
Рейтинг: 0 / 0
MySQL и Firebird для Web
    #36782366
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
protectorНазвать подобный бред решением проблем с мутацией...

Так уже неоднократно сказали, что это не решение, а обход проблемы. Т.е. забивается болт
на встроенную в Oracle версионность и на коленке ляпается свой суррогат оной. Что и
приводит нас обратно к моему вопросу: когда Оракул научится использовать версионность для
искоренения мутаций. Ответ - никогда.
скорее всего бесполезно, но я всё-таки попробую объяснить
проблема мутаций в том, что мы должны иметь две сущности таблицы в триггере: после изменений в операторе, вызвавшим триггер и после изменений в самом триггере
В MSSQL это решается введением таблиц inserted и deleted, нечто приблизительное предлагается и для обхода этого в Оракле
т.е. это проблема логическая и никакими техническими ухищрениями не решается

Я бы вообще не стал этой проблеме придавать такое значение, такое ситуации встречаются нечасто, не удивительно что разработчики обеих СУБД не стали разрабатывать какое-то решение(одни просто запретили, другие дали на откуп разработчику).

А приплетать сюда версионность... ну это наверное очень неподумавши...
...
Рейтинг: 0 / 0
MySQL и Firebird для Web
    #36782397
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!Gluk (Kazan)

Ok, твое решение проблемы???

я уже лет 10 не сталкивался с тригерами, но по моему обычно все таки учат в row-level before сохранять во времянку или pl/sql табличку, а писать в таблу уже statement тригером.


Гммм ... а я что сказал?
Кстати я протектора спрашивал :) Твое видение проблемы мне и так понятно
...
Рейтинг: 0 / 0
MySQL и Firebird для Web
    #36782410
Фотография Warstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yo.!
я уже лет 10 не сталкивался с тригерами, но по моему обычно все таки учат в row-level before сохранять во времянку или pl/sql табличку, а писать в таблу уже statement тригером.А в Постгре об этом подумали =) в statment триггере нет доступа к данным. Он только в row-level.
...
Рейтинг: 0 / 0
MySQL и Firebird для Web
    #36782414
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuper
проблема мутаций в том, что мы должны иметь две сущности таблицы в триггере: после
изменений в операторе, вызвавшим триггер и после изменений в самом триггере

Вот как раз "иметь две сущности таблицы" и называется "версионностью". В триггере просто
должна быть доступна версия таблицы до старта DML.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
MySQL и Firebird для Web
    #36782487
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
SergSuper
проблема мутаций в том, что мы должны иметь две сущности таблицы в триггере: после
изменений в операторе, вызвавшим триггер и после изменений в самом триггере

Вот как раз "иметь две сущности таблицы" и называется "версионностью". В триггере просто
должна быть доступна версия таблицы до старта DML.
и в FB так и сделано?
(но в любом случае версионность это несколько другое)
...
Рейтинг: 0 / 0
MySQL и Firebird для Web
    #36782514
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperи в FB так и сделано?
(но в любом случае версионность это несколько другое)

Нет, в FB читаются текущие для данной транзакции данные, но Оракло-гайз настаивают, что
читать надо консистентные данные, до DML...

И что же такое версионность в Вашем понимании?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
25 сообщений из 287, страница 10 из 12
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / MySQL и Firebird для Web
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]