|
|
|
MySQL и Firebird для Web
|
|||
|---|---|---|---|
|
#18+
hvladvadiminfohvladЕсли вы не в состоянии понять, о чём идёт посторонний диалог, может не стоит в него встревать ? Ну а что Вы хотели? - здесь же всех на форум допускают. Я не понимаю что Вы говорите, Вы не понимаете что Вас спрашуют. Это по философски все получается. Согласен. Но особенно "по философски" выглядят ценные фразы вроде этой: vadiminfoнаверное, от этого должно ломать. vadiminfoВпрочем, кое-что то я понял для себя: сторонником только процедур быть хуже, чем сторонником только Оракла. Так что я не зря встрял: инфу нужную получил.Вот этого вы не понимаете - вы выискиваете, чем бы померяться, а суть не в этом. Ну вам сторонникам только процедур виднее. Однако, думаю, что этого все еще не достаточно, чтобы становиться таковым сторонником. Думау, пока юзать все возможности СУБД, но в первую очередь язык БД. Вплоть до выяснения новых обстоятельств, про которые не лень буит рассказвать сторонникам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2010, 11:57 |
|
||
|
MySQL и Firebird для Web
|
|||
|---|---|---|---|
|
#18+
vadiminfo, спокойней. У нас вся система построена на триггерах (их больше 10 000). Там есть все и сервис (первичные ключи, простые проверки) и сложная бизнес логикак, и различное логирование. Но я представляю как можно было бы построить эту систему и без них, только на процедурах. Общая концепция такова, всем пользователям и ролям, запрещаются любые операции редактирования таблиц. Вместо этого на каждую необходимую операцию (insert,delete,update) создается процедура, в которой пишется сама операция редактирования плюс обрамляющий ее код (аналоги триггеров). В пределе таких процедур создается N*3, где N количество таблиц. Каждой процедуре даются права на операции редактирования таблиц. Пользователям и ролям даются права процедуры. В клиентском приложение операции редактирования перенаправляются с команд (insert, delete, update) на вызовы соответствующих процедур. Ранее упомянутый обрамляющий код в них, как и в случае триггеров, может состоять как из обычных ddl команд, так и из вызовов процедур. Аргументов в пользу такого подхода высказываются следующие: 1. Система на процедурах более понятна, так как в триггерах люди часто так запутывают логику, что не поймешь какое из каксадных событие привело к чему. На мой взгляд аргумент слабый, так как каскад вызываемых процедур, запутывается профанами не менее легко. При правильном общем стиле программирование проблем не должно возникать ни там, ни там. И наоборот при неправильном, проблему будут в обоих подходах. 2. Решение определенных проблем безопасности. Тут подробности я не помню. Возможно, речь идет о закрытие каких либо дырок, но может и нет. 3. Дополнительный уровень абстракции. Ну это на любителя. Есть свои плюсы и минусы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2010, 12:21 |
|
||
|
MySQL и Firebird для Web
|
|||
|---|---|---|---|
|
#18+
Итак пошел холивар ХП vs пярмые селекты в приложении?? Огорчу: ХП. Так как: 1) расносятся роли БДА/Писателя запросов(некоторые это исключаю из ДБА, а некоторые вносят) и Программиста клиентской части. 2) Появившийся слой абстракции позволяет настроить безопастность более гибко. Из своей практики с Постгре: Есть одна схема api, в которую может смотреть public(все пользователи) или application_user(группа пользователей). В этой схеме вынесены только заглушки в другие схемы и выглядит это примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. Отчасти это сделано из-за SECURITY DEFINER. То есть вызов процедуры из реальной схемы уже идет с правами другой группы, которая может работать с схемами, таблицами и внутренними процедурами. Обычно основная логика концентрируется именно тут. На триггеры-же практически ничего не вешается, кроме логгирования и вызова нотификаций. В качестве расширения этой технологии, обычно в api процедуры еще добавляют верификацию пользователя. Но это больше для веб приложений или приложений с расширенной системой ролей и прав. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2010, 12:26 |
|
||
|
MySQL и Firebird для Web
|
|||
|---|---|---|---|
|
#18+
vadiminfoGluk (Kazan)Сторонники процедур не открывают DML напрямую. Некоторые сторонники не открывают даже select (но я к ним не отношусь) Не совсем понял. Я думал из контекста предыдущего процедуры противопоставляются триггерам. Но мож я не все прочитал? А как стронники процедур получают доступ к данным, и как их модифицируют? Нельзя противопоставлять теплое мягкому, но можно вести разработку, в частности, так, что триггеры (в основном) не будут нужны. Подчеркну, я не призываю фанатично отказываться от использования триггеров. Просто у них есть минусы, знать о которых необходимо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2010, 12:27 |
|
||
|
MySQL и Firebird для Web
|
|||
|---|---|---|---|
|
#18+
artemana В пределе таких процедур создается N*3, где N количество таблиц.4, как минимум. Полный CRUD + что-нибудь типа sign и любые другие действия над сущностью, типа провода документа и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2010, 12:28 |
|
||
|
MySQL и Firebird для Web
|
|||
|---|---|---|---|
|
#18+
А... пардон... Холивар триггеры vs хп... По удобству, на самом деле - больше "как привык": 1) Триггеры - систему строили от данных, то есть от таблиц и т.д. 2) ХП - систему строили от объектов и методов над ними. Оба подхода имеют право на существование, 2-й подход ИМХО более ООП-style. Потом мне, как разработчику всего комплекса - удобнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2010, 12:31 |
|
||
|
MySQL и Firebird для Web
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2010, 12:37 |
|
||
|
MySQL и Firebird для Web
|
|||
|---|---|---|---|
|
#18+
AlexPhilMexanik, Главное понять, для чего это всё нужно. На Delphi + FB в части клепания сайтов денег не заработаешь, однозначно. На PHP + MySQL будет большая конкуренция "студентов", зато . На ASP .NET + MS SQL не будет большого объема халтуры (хотя найти можно, в том числе и по шарепоинту) за то За Java денег хорошо платят, особенно если от сайтостроительства отойти:) Это нужно для разового решения одной задачи - сделать общую базу данных для нескольких филилалов, разбросанных по городам (сбор заявок на услуги, контроль исполнения и прочая небольшая чушь). В веб проектирование ударяться глобально не собираюсь и этот проект раскручивать тоже не думаю.... Клиент поговаривает о собственном веб-узелке, на который можно напихать необходимых сервисов. Теперь подход к задаче не выглядит таким извратным? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2010, 12:38 |
|
||
|
MySQL и Firebird для Web
|
|||
|---|---|---|---|
|
#18+
kdv да Вы идеалист. Можно подумать, что на Оракле говнокод не пишут. Еще как, не сомневайтесь, я абсолютно уверен в этом. пишут, чего тут сомневаться. но в отличие от ФБ оракл в некоторых ситуациях самостоятельно может не позволить лабателю написать очередной говнокод. вот и яркий пример - ты и твои собратья по несчастью Firebird не поняли даже после моего разжевывания в чем опасность так и продолжите лабать говнокод, а вот оракл меня как ДБА защитит от такого говокода механизмом защиты от мутации. в этом и разница. kdvкакой еще в дуду "порядок"... может, в оракле привыкли пользоваться rownum, я не знаю, но у людей, использующих FB, привычки к "порядку строк" нет, потому что в SQL тоже порядок строк не гарантируется (кроме сортировок order by). по моему я достаточно разжувал ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2010, 12:39 |
|
||
|
MySQL и Firebird для Web
|
|||
|---|---|---|---|
|
#18+
hvlad Слово "атомарность" выше было употреблено не по назначению. Правильнее говорить о statement-level consistency. Кстати, в стандарте я этого термина не нашёл. Но, так как он уже неоднократно употреблялся здесь, я надеюсь у нас не будет разночтений в его интерпретации. Так вот, statement-level consistency, насколько я помню, не диктуется стандартом, а оставляется на усмотрение производителя. Я говорю о такой характеристике курсора, как sensitivity , которая, если не указано явно, является ASENSITIVE (секция 4.32 Cursors). Если есть другие ссылки на стандарт - буду рад ознакомиться. Так что формально read-committed в Firebird работает правильно, ибо речь в его определении идёт только о допустимых феноменах. Другой вопрос, что вы привыкли к оракловому пониманию statement-level consistency для RC :) Возможно я неправ, но для меня немножко дико видеть изменения, выполненные другой транзакцией не целиком. Да, та транзакция была выполнена атомарно, но то что она наизменяла, мы таковым не видим, со всеми возможными вытекающими ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2010, 12:40 |
|
||
|
MySQL и Firebird для Web
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)Просто есть разные способы вести разработку. При некоторых методах разработки, триггеры становятся не очень нужны. У этих метод есть сторонники и противники, плюсы и минусы ...Согласен Gluk (Kazan)Что до statement-триггеров, из них нельзя получить список измененных строк, с :old и :new значениями. Собственно упомянутый способ обхода мутации заключается в сохранении этой информации в row-level before триггере, с последующей отработкой в statement after триггере.Я знаю :) Gluk (Kazan)Именно так.COMMIT :) Gluk (Kazan)Это специфика OracleИменно. Каждый имеет право на специфику. В разумных пределах :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2010, 13:14 |
|
||
|
MySQL и Firebird для Web
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan)Возможно я неправ, но для меня немножко дико видеть изменения, выполненные другой транзакцией не целиком. Да, та транзакция была выполнена атомарно, но то что она наизменяла, мы таковым не видим, со всеми возможными вытекающими ...Ну так никто не заставляет пользоваться rc там, где нужен snapshot. Тем более, что snapshot в Firebird/Interbase был изначально и является уровнем изоляции по-умолчанию. Всё остальное - дело вкуса, привычек и специфики, если не оговорено стандартом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2010, 13:18 |
|
||
|
MySQL и Firebird для Web
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) Ну шо я могу сказать ... фигово ты знаешь Oracle. Этому финту первым делом студентов учат Собственно упомянутый способ обхода мутации заключается в сохранении этой информации в row-level before триггере, с последующей отработкой в statement after триггере. Но переключений контекстов получается немерянно. "И эти люди запрещают мне ковырять в носу" (с) Назвать подобный бред решением проблем с мутацией... Ну не знаю. Разработчику, кторый даже подумает об этом - отрывать руки, а уж тем кторые "студентов учат" растрелиивать на месте. Однозначно. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2010, 13:20 |
|
||
|
MySQL и Firebird для Web
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) Нельзя противопоставлять теплое мягкому, но можно вести разработку, в частности, так, что триггеры (в основном) не будут нужны. Подчеркну, я не призываю фанатично отказываться от использования триггеров. Просто у них есть минусы, знать о которых необходимо. На практике, я вседа пытаюсь предупреждать проггеров, чтобы не писали триггеров из каких-то идей оптимизации приложения, под тем предолгом, что это применение средств не по назначению. Однако, если процедукра должна запускаться на событие БД, например, таково типа бизнес правило, то для этого триггер подходит, скорее всего, луче всего. Исключение триггеров где они могли бы быть на своем месте тоже может нести риски увеличения энтропии программного обеспечения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2010, 13:24 |
|
||
|
MySQL и Firebird для Web
|
|||
|---|---|---|---|
|
#18+
Yo.! собратья по несчастью Firebird не поняли даже после моего разжевывания в чем опасность так и продолжите лабать говнокод, а вот оракл меня как ДБА защитит от такого говокода механизмом защиты от мутации. Забавно, что преподаватели, о которых упоминал Глюк тоже не понимают в чём опасность и по его же словам расказывают всем студентам как им обойти заботливые защитные механизмы. Чтобы эти студенты тоже могли лабать говнокод. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2010, 13:24 |
|
||
|
MySQL и Firebird для Web
|
|||
|---|---|---|---|
|
#18+
protectorGluk (Kazan) Ну шо я могу сказать ... фигово ты знаешь Oracle. Этому финту первым делом студентов учат Собственно упомянутый способ обхода мутации заключается в сохранении этой информации в row-level before триггере, с последующей отработкой в statement after триггере. Но переключений контекстов получается немерянно. "И эти люди запрещают мне ковырять в носу" (с) Назвать подобный бред решением проблем с мутацией... Ну не знаю. Разработчику, кторый даже подумает об этом - отрывать руки, а уж тем кторые "студентов учат" растрелиивать на месте. Однозначно. Posted via ActualForum NNTP Server 1.4 Ok, твое решение проблемы??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2010, 13:50 |
|
||
|
MySQL и Firebird для Web
|
|||
|---|---|---|---|
|
#18+
protectorНазвать подобный бред решением проблем с мутацией... Так уже неоднократно сказали, что это не решение, а обход проблемы. Т.е. забивается болт на встроенную в Oracle версионность и на коленке ляпается свой суррогат оной. Что и приводит нас обратно к моему вопросу: когда Оракул научится использовать версионность для искоренения мутаций. Ответ - никогда. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2010, 13:50 |
|
||
|
MySQL и Firebird для Web
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Yo.! собратья по несчастью Firebird не поняли даже после моего разжевывания в чем опасность так и продолжите лабать говнокод, а вот оракл меня как ДБА защитит от такого говокода механизмом защиты от мутации. Забавно, что преподаватели, о которых упоминал Глюк тоже не понимают в чём опасность и по его же словам расказывают всем студентам как им обойти заботливые защитные механизмы. Чтобы эти студенты тоже могли лабать говнокод. Ты просто нефтеме ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2010, 13:55 |
|
||
|
MySQL и Firebird для Web
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) Ok, твое решение проблемы??? я уже лет 10 не сталкивался с тригерами, но по моему обычно все таки учат в row-level before сохранять во времянку или pl/sql табличку, а писать в таблу уже statement тригером. Dimitry Sibiryakov когда Оракул научится использовать версионность для искоренения мутаций. Ответ - никогда. т.е. один раз сесть в лужу на вопросе как ты себе представляешь использование версионности для искоренения мутации тебе было не достаточно. что же прошу снова в туже лужу или может на этот раз ты нам поведаешь свою болезенную фантазию как версионность могла бы тут помочь ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2010, 14:56 |
|
||
|
MySQL и Firebird для Web
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov protectorНазвать подобный бред решением проблем с мутацией... Так уже неоднократно сказали, что это не решение, а обход проблемы. Т.е. забивается болт на встроенную в Oracle версионность и на коленке ляпается свой суррогат оной. Что и приводит нас обратно к моему вопросу: когда Оракул научится использовать версионность для искоренения мутаций. Ответ - никогда. скорее всего бесполезно, но я всё-таки попробую объяснить проблема мутаций в том, что мы должны иметь две сущности таблицы в триггере: после изменений в операторе, вызвавшим триггер и после изменений в самом триггере В MSSQL это решается введением таблиц inserted и deleted, нечто приблизительное предлагается и для обхода этого в Оракле т.е. это проблема логическая и никакими техническими ухищрениями не решается Я бы вообще не стал этой проблеме придавать такое значение, такое ситуации встречаются нечасто, не удивительно что разработчики обеих СУБД не стали разрабатывать какое-то решение(одни просто запретили, другие дали на откуп разработчику). А приплетать сюда версионность... ну это наверное очень неподумавши... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2010, 15:14 |
|
||
|
MySQL и Firebird для Web
|
|||
|---|---|---|---|
|
#18+
Yo.!Gluk (Kazan) Ok, твое решение проблемы??? я уже лет 10 не сталкивался с тригерами, но по моему обычно все таки учат в row-level before сохранять во времянку или pl/sql табличку, а писать в таблу уже statement тригером. Гммм ... а я что сказал? Кстати я протектора спрашивал :) Твое видение проблемы мне и так понятно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2010, 15:23 |
|
||
|
MySQL и Firebird для Web
|
|||
|---|---|---|---|
|
#18+
Yo.! я уже лет 10 не сталкивался с тригерами, но по моему обычно все таки учат в row-level before сохранять во времянку или pl/sql табличку, а писать в таблу уже statement тригером.А в Постгре об этом подумали =) в statment триггере нет доступа к данным. Он только в row-level. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2010, 15:26 |
|
||
|
MySQL и Firebird для Web
|
|||
|---|---|---|---|
|
#18+
SergSuper проблема мутаций в том, что мы должны иметь две сущности таблицы в триггере: после изменений в операторе, вызвавшим триггер и после изменений в самом триггере Вот как раз "иметь две сущности таблицы" и называется "версионностью". В триггере просто должна быть доступна версия таблицы до старта DML. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2010, 15:27 |
|
||
|
MySQL и Firebird для Web
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov SergSuper проблема мутаций в том, что мы должны иметь две сущности таблицы в триггере: после изменений в операторе, вызвавшим триггер и после изменений в самом триггере Вот как раз "иметь две сущности таблицы" и называется "версионностью". В триггере просто должна быть доступна версия таблицы до старта DML. и в FB так и сделано? (но в любом случае версионность это несколько другое) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2010, 15:44 |
|
||
|
MySQL и Firebird для Web
|
|||
|---|---|---|---|
|
#18+
SergSuperи в FB так и сделано? (но в любом случае версионность это несколько другое) Нет, в FB читаются текущие для данной транзакции данные, но Оракло-гайз настаивают, что читать надо консистентные данные, до DML... И что же такое версионность в Вашем понимании? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2010, 15:51 |
|
||
|
|

start [/forum/topic.php?fid=35&msg=36782487&tid=1552773]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
27ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 382ms |

| 0 / 0 |
