Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 9 10 11 12 13 [14] 15 16 17 18 .. 25   вперед  Ctrl
 Re: Нужна помощь  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Gluk (Kazan)
А зачем ?


Нехорошо ответчать вопросом на вопрос.

автор
Точно также все работает и в PL/SQL-ом коде. Исключения, транзакции и блоки
ортогональны. При исключении, откатывается только незавершенный оператор.
Разработчик не связан какой либо реакцией сервера (в смысле управления
транзакциями) на ошибки и сам решает, как ему обработать исключение.
И все ошибки - это исключения. Все единообразно, а не тут играем, а тут
рыбу заворачивали (c)


Не спорю, с "исключениями" в триггерах MS SQL есть отличия в порведении по сравнению с декларативными ограничениями. И это я не единожды показал в коде.

hvlad
Очень добрый вы :) Я бы вспомнил крыс и кактусы :)


Злые Вы... Уйду я от Вас...
29 авг 08, 10:09    [6123407]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
artemana
Member

Откуда: Днепропетровск
Сообщений: 1929
pkarklin

Не спорю, с "исключениями" в триггерах MS SQL есть отличия в порведении по сравнению с декларативными ограничениями. И это я не единожды показал в коде.

Если я правильно понял, все равно продолжаешь считать, что наличие этого отличия оправдано?
29 авг 08, 10:43    [6123593]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Bogdanov Andrey
Member

Откуда: Да уже и сам не знаю...
Сообщений: 2203
pkarklin
Все очень просто. Проверку (любую) из триггера выносим в CHECK ограничение на основании пользовательской функции (тем самым делая такие проверки декларативными) и код на MS SQL будет мало чем отличаться от Oracle.
И все приложения, которые до этого работали с базой весело работать перестают (то есть все их тоже надо переписывать на использование пользовательской функции, отлаживать, тестировать и т.п.).
29 авг 08, 11:34    [6123931]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Bogdanov Andrey
И все приложения, которые до этого работали с базой весело работать перестают (то есть все их тоже надо переписывать на использование пользовательской функции, отлаживать, тестировать и т.п.).


С чего бы это "приложения перестают работать"?! Чепуху какую-то говорите. Приложение и знать не знает, что проверка реализована не триггером, а пользовательской функцией!
29 авг 08, 11:52    [6124091]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
artemana
Если я правильно понял, все равно продолжаешь считать, что наличие этого отличия оправдано?


"Оправданность" оставлю без комментариев. ;)
29 авг 08, 11:53    [6124097]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Bogdanov Andrey
Member

Откуда: Да уже и сам не знаю...
Сообщений: 2203
pkarklin
С чего бы это "приложения перестают работать"?! Чепуху какую-то говорите. Приложение и знать не знает, что проверка реализована не триггером, а пользовательской функцией!
Значит я чего-то не понял в предлагемом вами варианте решения. Повторю еще раз. У нас есть бд и некоторые приложения работающие с ней. Бд, естественно, содержит некоторые ограничения целостности. Приложения на эти ограничения в той или иной мере полагаются.
Мы создаем еще одно приложение (ну или новую экранную форму) с описанными выше требованиями.
Из вашей реплики я понял, что вы предлагаете при написании нового приложения внести какие-то изменения в бд, так как интерфейс бд меняется, то нам надо внести изменения в приложения, которые этим интерфейсом пользуются.
29 авг 08, 12:53    [6124599]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Bogdanov Andrey
Приложения на эти ограничения в той или иной мере полагаются.


Ни одно мое приложение на какие-либо метаданные бд, в том числе и ограничения не полагается. С моими бд вообще можно работать из Query Analyzera, нет в приложении никакой другой логики, кроме вызова хп. И схема данных, и ограничения в бд скрыты.

Приложение понятия не имеет, что и как реализовано в бд. И обработчик ошибки в приложении - это показ диалога с собщением об ошибке с сервера. Все. Я не шлю DML инструкций и не управляю транзакциями с клиентами.

Я могу полность переписать логику работы бд, а приложение останется неизменным.

Пользовательские функции (UDF) - они в бд, а не на клиенте, и именно на них можно реализовывать сложные ограничения бизнес-логики, не прибегая к триггерам.

Но опять же, клиентское приложение об этом не узнает.
29 авг 08, 13:06    [6124719]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Bogdanov Andrey
Member

Откуда: Да уже и сам не знаю...
Сообщений: 2203
pkarklin
Ни одно мое приложение на какие-либо метаданные бд, в том числе и ограничения не полагается. С моими бд вообще можно работать из Query Analyzera, нет в приложении никакой другой логики, кроме вызова хп. И схема данных, и ограничения в бд скрыты.
Я правильно понимаю, вас неудовлетворяет стандартный SQL-интерфейс к бд и вы вместо него разрабатываете свой собственный, основанный на хп? Это, конечно, похвально, но мне кажется, что было бы гораздо лучше, если бы стандартные интерфейсы работали удовлетворительным образом.
Кстати, а при использовании вашего хп-шного интерфейса кто занимется управлением транзакциями? Это внутри хп спрятано, или управляет вызывающая компонента?
29 авг 08, 13:12    [6124760]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Bogdanov Andrey
Я правильно понимаю, вас неудовлетворяет стандартный SQL-интерфейс к бд и вы вместо него разрабатываете свой собственный, основанный на хп?


Вы меряете мой подход Oracleовскими мерками, где SQL и PL\SQL суть две большие разницы. В отличии от Oracle в MS SQL один язык - T-SQL, и на нем пишуться и хп, и ad-hoc запросы. ХП- это не интерфейс, а серверная логика. Дергать эти хп можно хоть из приложения, хоть из апп. сервера. Поэтому говорить о "неудовлетворенности" по меньшей мере некорректно.

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

Bogdanov Andrey
Кстати, а при использовании вашего хп-шного интерфейса кто занимется управлением транзакциями? Это внутри хп спрятано, или управляет вызывающая компонента?


Управление транзакциями ведется в хп.
29 авг 08, 13:18    [6124801]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Bogdanov Andrey
Member

Откуда: Да уже и сам не знаю...
Сообщений: 2203
pkarklin
Вы меряете мой подход Oracleовскими мерками, где SQL и PL\SQL суть две большие разницы. В отличии от Oracle в MS SQL один язык - T-SQL
Дело в том, что SQL - это язык не MSSQL и не Oracle, а общий стандарт. В отличии от всяких pl/sql и t-sql.

pkarklin
, и на нем пишуться и хп, и ad-hoc запросы. ХП- это не интерфейс, а серверная логика.
Что значит "не интерфейс"? У вас что api к вашей бд совесм нету?

pkarklin
Реализация серверной логики на хп - это то, что здесь уже упоминалось - инкапсуляция данных и кода, их обрабатывающего на стороне сервера.
Меня радует, то что вы за инкапсуляцию, а вот то, что реализовали эту инкапсуляцию используея не стандартный sql-api к бд - огорчает :)

pkarklin
Управление транзакциями ведется в хп.
Понятно, хотя я и предпочитаю другой подход.
29 авг 08, 13:30    [6124889]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Bogdanov Andrey
Дело в том, что SQL - это язык не MSSQL и не Oracle, а общий стандарт. В отличии от всяких pl/sql и t-sql.


Все-таки это язык, по определению. А у каждой СУБД его расширение.


Bogdanov Andrey
Что значит "не интерфейс"? У вас что api к вашей бд совесм нету?


То и значит, что не интерфейс. Вызов хп с клиента - это такая же инструкия T-SQL (EXEC), как и SELECT. API взаимоотношения клиента с сервером один! На нижнем уровне это TDS. Выше может быть что угодно, ODBC, OLE DB или вообще ADO.

Bogdanov Andrey
Меня радует, то что вы за инкапсуляцию, а вот то, что реализовали эту инкапсуляцию используея не стандартный sql-api к бд - огорчает :)


Нету такого поняти sql-api нету, ну или если так хотите, вызов хп - это sql-api.
29 авг 08, 13:36    [6124929]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Dihotom
Member

Откуда:
Сообщений: 453
Bogdanov Andrey
... а вот то, что реализовали эту инкапсуляцию используея не стандартный sql-api к бд - огорчает :)

На самом деле, это разные подходы, которые к данной теме не имеют. Я так понимаю, что у Вас бизнес-логика на клиенте, а к БД Вы обращаетесь только посредством чистых стандартных SQL-запрсов? Есть и другой подход, когда бизнес-логика расположена на сервере (ХП) и реализована на языке СУБД (T-SQL, PL\SQL). В этом случае с клиента приходит только вызов той или иной ХП.
Но, повторюсь, это совсем уже другая тема.
29 авг 08, 13:37    [6124932]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Dihotom
Но, повторюсь, это совсем уже другая тема.


+1

И она перетиралась не единожды и здесь и на RSDN.
29 авг 08, 13:39    [6124942]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
hey
Guest
Dihotom
Есть и другой подход, когда бизнес-логика расположена на сервере (ХП) и реализована на языке СУБД (T-SQL, PL\SQL). В этом случае с клиента приходит только вызов той или иной ХП.

есть еще один подход - логика на клиенте (в домейн-модель) но маппинг объектов все равно на ХП
29 авг 08, 13:52    [6125024]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Bogdanov Andrey
Member

Откуда: Да уже и сам не знаю...
Сообщений: 2203
pkarklin
То и значит, что не интерфейс. Вызов хп с клиента - это такая же инструкия T-SQL (EXEC), как и SELECT. API взаимоотношения клиента с сервером один! На нижнем уровне это TDS. Выше может быть что угодно, ODBC, OLE DB или вообще ADO.

Что значит "API один". API - это перечень допустимых вызовов, принимаемых данной компонентой. Исходя из ваших слов я понял, что с вашай бд приложениям запрещено использовать простые SQL-запросы, нужно использовать вызовы XP.

pkarklin
Нету такого поняти sql-api нету, ну или если так хотите, вызов хп - это sql-api.
Я уже понял, что у вас этого понятия - нету.

Dihotom
На самом деле, это разные подходы, которые к данной теме не имеют.
Как раз к данной теме это и имеет отношение. Я интересуюсь можно ли на SQL Server решить описанную мной выше задачу используя в качестве языка взаимодействия с бд только чистый SQL.

Dihotom
Я так понимаю, что у Вас бизнес-логика на клиенте, а к БД Вы обращаетесь только посредством чистых стандартных SQL-запрсов? Есть и другой подход, когда бизнес-логика расположена на сервере (ХП) и реализована на языке СУБД (T-SQL, PL\SQL). В этом случае с клиента приходит только вызов той или иной ХП.
Ну вот, до этого все про изолированность слоев говорили, а теперь...
Меня в данный момент не интересует где и как реализована бизнес-логика.
Я говорю о слое хранения данных (этот слой имеет некоторые свои законы и ограничения) и естественным языком работы с этим слоем в реляционных СУБД является язык SQL-запросов. Слой реализации бизнес-логики - следующий, он может быть реализован хоть на том же сервере, что и БД, хоть на app сервере, хоть на клиенте. С точки зрения слоя хранения данных это все "приложения".
К сожалению, оппоненты этой простой мысли, об отделении слоя (не путать с сервером) хранения данных и слоя реализации бизнес-логики понять не хотят и упорно мне бизнес-логику подсовывают.
29 авг 08, 14:06    [6125122]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Dihotom
Member

Откуда:
Сообщений: 453
Bogdanov Andrey
Ну вот, до этого все про изолированность слоев говорили, а теперь...
Меня в данный момент не интересует где и как реализована бизнес-логика.
Я говорю о слое хранения данных (этот слой имеет некоторые свои законы и ограничения) и естественным языком работы с этим слоем в реляционных СУБД является язык SQL-запросов. Слой реализации бизнес-логики - следующий, он может быть реализован хоть на том же сервере, что и БД, хоть на app сервере, хоть на клиенте. С точки зрения слоя хранения данных это все "приложения".
К сожалению, оппоненты этой простой мысли, об отделении слоя (не путать с сервером) хранения данных и слоя реализации бизнес-логики понять не хотят и упорно мне бизнес-логику подсовывают.

Просто Вы изначально написали "И все приложения, которые до этого...", что сразу определило их однозначное местоположение - клиент, со всеми вытекающими отсюда рассуждениями. Мне кажется, я Вас понял правильно - не приложения, а операторы (функции) в вышестоящем слое - тогда всё встает на свои места? А сама фраза сбивает с толку.
Кстати, если бы использовали термин "клиентский слой" вместо "приложение" - было бы понятнее, хотя некая двусмысленность всё равно остается.
29 авг 08, 14:16    [6125208]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
pkarklin
Gluk (Kazan)
А зачем ?


Нехорошо ответчать вопросом на вопрос.


Но порой необходимо, дабы не углубляться в схоластику.
То о чем Вы спросили бессмысленно с точки зрения практической работы с Oracle
29 авг 08, 14:27    [6125286]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
pkarklin
Bogdanov Andrey
Как в данном случае должен поступить разработчик приложения работая с MSSQL?


Все очень просто. Проверку (любую) из триггера выносим в CHECK ограничение на основании пользовательской функции (тем самым делая такие проверки декларативными) и код на MS SQL будет мало чем отличаться от Oracle.


Простота хуже воровства. Если бы все проверки можно было выполнить в CHECK, триггеры были бы гораздо менее востребованны чем на самом деле :)
29 авг 08, 14:38    [6125387]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
pkarklin
Пользовательские функции (UDF) - они в бд, а не на клиенте, и именно на них можно реализовывать сложные ограничения бизнес-логики, не прибегая к триггерам.


ну то есть оно конечно можно, но как то уж очень кучеряво
29 авг 08, 14:39    [6125393]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Николай1
Member

Откуда: Москва
Сообщений: 495
Dihotom
Николай1
Ну, блин, собрались архитекторы.
Долго не мог понять, что во всех этих рассуждениях про выброс исключения не так. Наконец понял.
Если беретесь проверять в триггере бизнес-логику, то ее следует проверять и реализовывать до конца. То есть, если в триггере выполняется проверка на красное сальдо, и, есть варинты корректной обработки такой ситуации, то именно внутри триггера эта ситуация и должна быть обработана. Тогда все получается логично - я делаю изменения данных и, либо получаю завершенную транзакцию, либо получаю откаченную.

Выполнять какие-либо действия вне триггера по результатам его "завала", как минимум, странно. Тем более, что "снаружи" придется еще и выяснять причины завала, который могут быть самые разные, не связанные с кодом именно триггера, а, например, с нарушением декларативной целостности. Веселый будет обработчик ошибок....

Кстати, вопрос к знатокам. А всегда ли триггер выполняется _сразу_ после оператора, который приводит к его вызову? Например, в PROGRESS тригеры обычно выполняются при завершении транзакции, (если не побеспокоиться об ином специально), соответственно, говорить о последовательности их вызова тоже не приходится (опять же, если не побеспокоиться об этом специально).

Ну не обладает триггер всей информацией, необходимой для обработки ошибок. Как Вы себе это представляете? Причины "завала" определяются элементарно - никто не говорит о выбросе одного единственного исключения "Ошибка", какая ошибка возникла, такое исключение и генерируется. Кроме того, у Вас транзакция может состоять из большого числа потенциально опасных оператор. Вы в каждом будете писать код обработки ошибок? У меня такое чувство, что Вы никогда не занимались структурированной обработкой ошибок.


Не надо делать предположений о том, чем я занимался, а чем - нет.
Выброс исключения из триггера предполагает, что снаружи есть "некто", кто это исключение обработает. Но вот если этого "некта" нету?

Взял я и написал:

assign order.amount = 1000000 no-error.

И чо? Уйдет заказ на миллион? И будет это хорошо и правильно?
31 мар 09, 19:24    [7001833]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
martin_bishop
Member

Откуда:
Сообщений: 82
Заранее прошу прощения, если я повторяюсь. Но я честно дочитал до 6й страницы, а дальше перескочил на 14ю. Ничего не изменилось. Время от времени звучат неплохие аргументы, но оппоненты их не слышат …

Я долго примерялся, что бы такое сказать, чтобы изложить свою точку зрения и не повториться :-)

Но я, всё-таки, добавлю свои 5 копеек:
Не должен нижний слой решать за верхний откатывать ли всю транзакцию целиком.
Одно дело, когда триггер не дал вставить стрёмную строку в таблицу(ы), над которой(ыми) он квохчет (простите, блюдёт целостность), а другое дело когда он откатил чужую транзакцию вместе с другими операциями, до которых ему (маленькому триггеру) не должно быть дела.

Приведу пример:

Я пытаюсь сделать извлечение исчислимой сущности на одном из серверов из некоторой таблицы. Привратник этой таблицы (триггер, если угодно) решил, что всё, больше он отдать не в состоянии и бамс! нет моей транзакции. Но дорогой мой привратник, кроме твоей таблицы могут быть и другие таблицы, которые могли бы отдать нужную мне сущность. Но твоё усердие сделало это невозможным. Мало того, что ты мне ничего не дал, так прекратил мой батч! Теперь мне всё начинать с начала, памятуя, что эта таблица не только пуста, но и кусается …

Безусловно, если бы команда извлечения из таблицы была единственным стэйтментом моей хранимки, то ладно: запустил одну хранимку – не дала, запустил вторую … Но хранимка-то называется: GetEntityFromSomewhere и является методом клиента (у клиента нет особых прав – только запуск некоторых хранимок). Такой триггер с червоточиной делает подобную логику работы (опрос не одной, а несколько таблиц, в поисках той, с которой можно дружить) невозможной.

Много же мне пришлось вырезать червоточин, которые оставили «прошлые» в системе ... Я уже не говорю об увеличении времени моей работы, когда ожидаешь вставки в таблицу, но не получаешь ничего, даже raiserror.

На мой взгляд: триггер может быть полезен только в некоторых случаях:

- отладка (в продакшн версии их уже вырезали);
- быстрый поиск чего-либо в огромной и недавно свалившейся на тебя базе (но только в тесте, в продакшн опять же их нет);
- когда к телу базы допущено несколько враждующих группировок и рисовать по ней на нижнем уровне привилегий может всякий юниор из R&D, а не только DBA (но в таком обезьяннике лучше не работать. Есть поговорка: «У семи нянек – дитя без глазу». Такое бывает, когда увольняют главного архитектора из экономии)

Основной аргумент оппонентов «за триггер»: блюсти целостность.
Ответ: не возражаю.
Пусть будет триггер Instead of. Пусть он НЕвыполнит плохую операцию.
Но и всё!
1. Не дай свершиться злому
2. Сообщи мастеру транзакции, если это его (мастера) волнует.

И целостность не нарушена, и транзакция цела и мастер транзакции уведомлён и может что-то переиграть.

Но не твоего (триггера) ума дело что зымыслил мастер ...
25 май 09, 21:53    [7225560]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
Bogdanov Andrey
Конечно нет. БД - это приложение обеспечивающее хранение информации. "Клиент" - приложение обеспечивающее работу пользователей или других приложений с этой (а также с какой-то другой) информацией.


Вы случайно не разработчик 1С?...
Информацию ХРАНИТЬ можно и в текстовых файлах. Храните на здоровье, зачем СУБД?
26 май 09, 05:09    [7226017]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Кудряшка
Member

Откуда: Сидней
Сообщений: 2219
Мое персональное скромное мнение по теме дискуссии: если в транзакции возникла ошибка - ее надо откатить и точка.

pkarklin,
+1024

И триггер даже тут вообще по большому счету ни при чем. Например,

BEGIN TRY
	BEGIN TRAN
		insert into T1 ..... -- триггеров на таблицу T1 нет
		update T2 ..... -- триггеров на таблицу T2 нет, но тут возникает ошибка
		delete T3 ..... -- триггеров на таблицу T3 нет
	COMMIT
END TRY
BEGIN CATCH
	IF @@TRANCOUNT > 0
		ROLLBACK
END CATCH

Игнорировать выполнение "update T2" при возникновении ошибки - зло (даже если бы был триггер, который эту ошибку выдавал). "update T2" надо написать так, чтобы эта команда не генерила ошибку, а если она ошибку генерит, то откатывать транзакцию. И для меня странно обсуждать этот вопрос относительно разных СУБД. Я ни в какой СУБД не напишу код, который в транзакции будет счачала генерить ошибку, а потом ее благополучно игнорировать.
Даже если эта дикость войдет в общую практику.
А если есть триггер, где написано "низзя", а оказывается в некоторых случаях "можно", значит надо переписать триггер так, чтобы он в этих конкретных случаях говорил "можно". Либо выкинуть этот триггер. Игнорирование ошибок чем-то похоже на "как бы самих себя обмануть". Зачем-то триггер написали, а казывается он делает не то, что нам надо... и как бы нам его теперь похитрее обойти.
ИМХО.
26 май 09, 06:02    [7226033]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
Кудряшка

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

... и обрабатывать ошибку на клиенте?
26 май 09, 10:02    [7226500]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
MasterZiv
Member

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

martin_bishop wrote:


> Но я, всё-таки, добавлю свои 5 копеек:
> *Не должен нижний слой решать за верхний откатывать ли всю транзакцию
> целиком.*
> Одно дело, когда триггер не дал вставить стрёмную строку в таблицу(ы),
> над которой(ыми) он квохчет (простите, блюдёт целостность), а другое
> дело когда он откатил чужую транзакцию вместе с другими операциями, до
> которых ему (маленькому триггеру) не должно быть дела.

*Не должен нижний слой решать за верхний откатывать ли всю транзакцию
целиком.*

-- это постулируемый *тобою* общий подход, или кем-то до тебя в треде ?
В любом случае, хочу заметить, что допустимы оба варианта. Т.е.
как подход "малейшее нарушение откатывает всё", так и "откатываются
только ошибочные (недопустимые) изменения".

Первый вариант как правило выбирается, если в СУБД нет поддержки
автономных вложенных транзакций, т.е. таких, когда можно внутри
большой транзакции сделать маленькую вложенную, и откатить только
эту вложенную транзакцию. Но с другой стороны, всегда можно использовать
отмену действий путём компенсационных изменений в БД. Это и rollback to
savetoint, и rollback trigger, и прочее всякое.

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

Posted via ActualForum NNTP Server 1.4

26 май 09, 10:31    [7226707]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 9 10 11 12 13 [14] 15 16 17 18 .. 25   вперед  Ctrl
Все форумы / Сравнение СУБД Ответить