Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 16 17 18 19 20 21 22 [23] 24 25   вперед  Ctrl
 Re: Нужна помощь  [new]
martin_bishop
Member

Откуда:
Сообщений: 82
Да, но это значит, что если у меня транзакция охватывает несколько операций подряд типа "взять со склада" и "вернуть на склад", и порядок операций заранее не известен,

В конце операция баланс +
Но на некотором шаге может быть и минус

Получается, что в случае MS я смогу организовать такую транзакцию (и она не нарушит ни бизнес-логику ни целостность склада),
а в Вашем Oracle первый же минус срубит транзакцию целиком?

Тогда я больше люблю MS :-)
28 май 09, 19:36    [7241694]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
martin_bishop
Да, но это значит, что если у меня транзакция охватывает несколько операций подряд типа "взять со склада" и "вернуть на склад", и порядок операций заранее не известен,

В конце операция баланс +
Но на некотором шаге может быть и минус

Получается, что в случае MS я смогу организовать такую транзакцию (и она не нарушит ни бизнес-логику ни целостность склада),
а в Вашем Oracle первый же минус срубит транзакцию целиком?

Тогда я больше люблю MS :-)


либо вы отражаете в базе не то, что происходит на самом деле, либо действительно с вашего склада можно взять больше чем там есть
28 май 09, 19:48    [7241725]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
martin_bishop
Member

Откуда:
Сообщений: 82
Зайцев Фёдор
либо вы отражаете в базе не то, что происходит на самом деле, либо действительно с вашего склада можно взять больше чем там есть


Откуда это следует?

Я же писал, вроде:
"... если у меня транзакция охватывает несколько операций подряд ..."
28 май 09, 20:05    [7241776]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
martin_bishop
Member

Откуда:
Сообщений: 82
Видно у меня карма такая ...

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

В данном случае я хотел обратить внимание на понятие "промежуточный результат", в противовес понятию "окончательный результат"

Если какой-то промежуточный результат не верен из этого ещё не следует, что окончательный результат так же неверен
28 май 09, 20:18    [7241811]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
martin_bishop
Зайцев Фёдор
либо вы отражаете в базе не то, что происходит на самом деле, либо действительно с вашего склада можно взять больше чем там есть


Откуда это следует?

Я же писал, вроде:
"... если у меня транзакция охватывает несколько операций подряд ..."

также вы написали, что порядок не известен.
я ухитрился прочитать "заранее известен", т.к. с трудом представляю обратное. ошибся.
кстати, зачем их вообще разделять, если вы не знаете, в каком порядке происходило изменение остатков ?
не совсем понятно, чем именно обеспечивается то, что транзакция включает такой набор действий, который непременно приводит к положительному балансу ?
28 май 09, 21:46    [7241976]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
martin_bishop
Member

Откуда:
Сообщений: 82
С точки зрения склада положительность баланса просто отражает истину
(отрицательность - ложь)

Хорошо. Раз пример кажется слишком искуственным:

Порядок следования операций можно вычислить, но это - дополнительные затраты процессорного времени ...

Так подойдёт?
28 май 09, 22:06    [7242008]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
martin_bishop
Member

Откуда:
Сообщений: 82
Вы по-прежнему обращаете внимание на форму ...
Я же хотел бы обсудить лемму:

martin_bishop
Если какой-то промежуточный результат не верен из этого ещё не следует, что окончательный результат так же не верен
28 май 09, 22:09    [7242011]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
martin_bishop
Member

Откуда:
Сообщений: 82
Да и просто вычленить два понятия:
- промежуточный результат
- окончательный результат
28 май 09, 22:10    [7242012]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Gold_
Member

Откуда:
Сообщений: 527
все не прочитал.
при выборе между MySQL и FireBird конечно же Postgresql (нет вложенных транзакций, есть точки сохранения)
29 май 09, 00:01    [7242199]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
Зайцев Фёдор
Gluk (Kazan)
А проверить религия не позволяет ?
Мне вот под Oracle не трудно, а MS SQL-я под рукой нет

Обязательно проверю, но не раньше, чем мне действительно потребуется savepoint


Слив засчитан
Ну почему всегда так, как на йух попысылать всегда пожалуста, а как проверить собственное изрядно сомнительное утверждение - так сразу в кусты ???
29 май 09, 06:58    [7242409]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
martin_bishop
SergSuper
Вы также понимаете что такое атомарность? Если да - что из этого в MSSQL не выполняется?
Никто не ставит под сомнение выполнение ACID в случае роллбэка в триггере.

Но утверждается, что роллбэк снаружи триггера и необязательный откат при любой ошибке нижнего слоя (триггера, например) тоже не нарушает ACID


Еще раз по буквам: Как Вы собираетесь нарушить ACID в MSSQL без помощи монтировки ???
29 май 09, 07:02    [7242412]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
Bogdanov Andrey

В Oracle декларируется атомарность DML-операторов. Есть некоторые оговорки (например, использование автономных транзакций), но обеспечение атомарности выполняется СУБД автоматически и от программиста скорее требуется приложить усилия, чтобы ее нарушить.


Пример усилий в студию (shutdown abort не рассматривать)
29 май 09, 07:03    [7242414]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Di_LIne
Member

Откуда: Тропик Скорпиона
Сообщений: 32554
Gluk (Kazan)
Bogdanov Andrey
...например, использование автономных транзакций...


Пример усилий в студию (shutdown abort не рассматривать)

Что прицепился к челу?
Видишь - автономные транзакции. Как подлодка.
Ей сервер и нафих не упал...
29 май 09, 07:18    [7242426]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
Di_LIne
Gluk (Kazan)
Bogdanov Andrey
...например, использование автономных транзакций...


Пример усилий в студию (shutdown abort не рассматривать)

Что прицепился к челу?
Видишь - автономные транзакции. Как подлодка.
Ей сервер и нафих не упал...


Чел оперирует понятиями, которые сам выдумал
и вводит других в заблуждение
Разьве не так ???
29 май 09, 07:36    [7242444]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Владимир Смирнов
Member

Откуда: Северодвинск
Сообщений: 136
Bogdanov Andrey
Владимир Смирнов
Именно в раннее сказанном. Неправильные действия (операция, транзакция) должны быть отменены (завершены отменой).
Должно быть отменено только неправильные действие или весь ряд действий им предшествующих?
Если только одно действие, то это именно то, что Oracle называет атомарностью операций и неукослонно этому следует. Я правильно понимаю, что принцип "атомарности операций" в MSSQL не выполняется?

Нет, во всяком случае из моих слов этого не следует. К тому-же я не упоминал MSSQL.

Bogdanov Andrey
Владимир Смирнов
Bogdanov Andrey

1. Считаете ли Вы, что при любой ошибке в процессе исполнения вся транзакий должна быть откачена?

"Любой" - слишком обширно, потому ответ - "нет, не считаю".

Хорошо, здесь наши позиции совпадают.

То что при "Любой" - не считаю, но в некоторых случаях считаю необходимым откат всей транзакции.

Bogdanov Andrey

Владимир Смирнов
Bogdanov Andrey

2. Считаете ли вы использование операторов управления транзакциями в триггерах является хорошим/плохим, допустимым/недопустимым.

Допустимым, и даже необходимым. Это "последняя линия защиты".

Ага ну вот и главная точка расхождения.
С одной стороны удивляет слово "необходимым" - не могу представить себе для чего они нужны. По всей видимости в MSSQL они нужны из-за отсутствия возможности сделать exception в триггере - все остальные сервера пошли нормальным путем и сделали exception, а Microsoft, как всегда, решил сделать по-своему. Других причин для использования - не вижу.
Ну и, главное, считаю их вредными, так как они, на мой взгляд, нарушают принцип инкапсуляции (кстати, относите ли Вы инкапсуляцию к удачной концепции).

Я считаю, что переносить приёмы работы одним инструментом на другой инструмент, без учёта различий между ними, неудачный подход. Это как в известном анекдоте про электропилу "... - фигня эта твоя электропила, не пилит ничерта ... - А, так её ещё и в розетку включать надо?!"

Bogdanov Andrey

Владимир Смирнов
Bogdanov Andrey

3. Считаете ли Вы, что использование единых концепций и правил программирования в рамках одного проекта является порочной практикой.

Зависит от концепции и правил. Если концепция (или правило) неудачная, а тем более ошибочная (как, например, неуникальность ПК), то вреда от неё неисчислимо больше, чем отсутствие вообще какой бы то ни было концепции.

Ага, вот и наметилась точка расхождения. Я считаю, что отсутствие каких-либо концепций значительно хуже любых концепций. Хотя, возможно, что мне просто не хватает фантазии для того, чтобы придумать настолько "неудачные" концепции. Ну разве только использование rollback в тригерах :)

Практически любая концепция, построенная на незнаниях или ложных представлениях будет неудачной. Попробуйте пилить электропилой следуя "концепции" ручной ножёвки, и Вы сразу получите ощутимый пример, даже без фантазии. :)
29 май 09, 09:06    [7242539]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Владимир Смирнов
Member

Откуда: Северодвинск
Сообщений: 136
martin_bishop
Владимир Смирнов
Как гарантированно отменить эти изменения и не допустить неправильные данные после завершения выполнения транзакции?


Просто поместите инсёрт внутрь транзакции ...


Не знаю, как в других СУБД, в MSSQL и одиночный "инсёрт" всё равно выполняется в транзакции. Будь это явная или неявная транзакция.
Мой вопрос был в другом. Как гарантированно, не используя отката в триггере, не допустить появления неправильных данных в БД.
В Ваших примерах, кто вносит изменения - тот и следит за недопустимостью. А если тот кто вносит изменения проигнорирует сообщения сервера и всё равно завершит транзакцию?
29 май 09, 09:19    [7242569]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
martin_bishop
Member

Откуда:
Сообщений: 82
Владимир Смирнов
А если тот кто вносит изменения проигнорирует сообщения сервера и всё равно завершит транзакцию?

Если он по ошибке игнорирует, такая ошибка исправляется, если из-за лени, то от такого надо избавлятся, раз он нарушает общее правило:
необоснованно игнорировать собщения сервера запрещено.
29 май 09, 09:38    [7242642]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
martin_bishop
Member

Откуда:
Сообщений: 82
Не знаю как где принято, но в моей системе принято проверять и обрабатывать ошибку после любого оператора, способного её вызвать
29 май 09, 09:41    [7242652]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Владимир Смирнов
Member

Откуда: Северодвинск
Сообщений: 136
martin_bishop
Владимир Смирнов
А если тот кто вносит изменения проигнорирует сообщения сервера и всё равно завершит транзакцию?

Если он по ошибке игнорирует, такая ошибка исправляется, если из-за лени, то от такого надо избавлятся, раз он нарушает общее правило:
необоснованно игнорировать собщения сервера запрещено.

Предпочитаете решать технические вопросы административными регламентами?
29 май 09, 09:41    [7242654]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
martin_bishop
Member

Откуда:
Сообщений: 82
Прошу прощения, вместо любого надо каждого
29 май 09, 09:42    [7242657]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
martin_bishop
Member

Откуда:
Сообщений: 82
Не адм. регламент, а правило:

Никогда не оставляй без внимания ни одну ошибку, которая может нарушить целостность или бизнес-логику.

Простите, но я всегда считал это всеобщим правилом
29 май 09, 09:46    [7242669]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Владимир Смирнов
Member

Откуда: Северодвинск
Сообщений: 136
martin_bishop,

Тогда, по Вашему, в СУБД вообще не нужны механизмы ограничения целостности. Установите регламент "В БД вносить только правильные данные. Виновные в нарушении будит немедленно уволены." и нет проблем?
29 май 09, 09:46    [7242670]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
martin_bishop
Member

Откуда:
Сообщений: 82
Нет, в СУБД нужны механизмы ограничения целостности
А иначе откуда к Вам будут поступать сигналы о её нарушении?
29 май 09, 09:48    [7242680]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
martin_bishop
Member

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

1. не дать нарушить целостность и прекратить весть батч

2. не дать нарушить целостность, но вернуть вызвавшей эту ошибку процедуре сообщение о попытке и дать возможность ей самой решить продолжать ли выполнение или закончить.

Где Вы видите нарушение целостности во втором случае, которое требует админ ресурса?
29 май 09, 09:54    [7242699]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Владимир Смирнов
Member

Откуда: Северодвинск
Сообщений: 136
martin_bishop
Нет, в СУБД нужны механизмы ограничения целостности
А иначе откуда к Вам будут поступать сигналы о её нарушении?

То есть Вы отводите этим механизмам исключительно предупредительную, сигнальную роль? Например, поставить ограничение не уникальность атрибута. Вы вносите неуникальное значение - а Вам СУБД - "Извините, такое значение уже есть". И Вы считаете, что технически допустимо сказать ей "всё равно COMMIT". Только административный запрет не позволяет пользователю сказать "COMMIT"?
29 май 09, 10:04    [7242741]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 16 17 18 19 20 21 22 [23] 24 25   вперед  Ctrl
Все форумы / Сравнение СУБД Ответить