На кой стандарт? В , където има доста неща за транзакциите, не намирам нищо такова... или пък е описано прекалено абстрактно.
Единственото нещо, което потенциално оправдава подобно поведение е следното: "If execution of a <commit statement> is attempted, but certain exception conditions are raised, it is unknown whether or not the changes made to SQL-data or schemas by that SQL-transaction are canceled or made persistent."
Иначе не смятам, че транзакциите ме освобождават от съответното задължение, но очаквам СУБД да прави все пак нещо самичка, най-малкото да знае състоянието на собствената си транзакция, а не аз с външна логика да го определям. То е ясно, че в клиентското приложение мога да реализирам и констрейнти и тригери, че и сикуънси...
В този смисъл, предпочитам да изхождам от презумпцията, че всяка инструкция е критично важна, а не от обратната - че грешките нищо не значат. Най-малкото, това е една от основните причини изобщо да се използват транзакции - защото всички инструкции са важни и зависещи една от друга и представляват една логическа единица (операция), съответно частичният успех не е вариант. Ако пък толкова искам умишлено да изолирам част от транзакцията като не-важна, мога да го направя с изрични чек-пойнтове.
Това, което пише в Уикипедия е в същия дух.
Та, тук общо взето спорът се свежда до следното - какво точно означава командата commit?
И чия е отговорността?
За мен пускането на commit е равносилно на това да кажа на базата следното: "Виж сега, бях ти пуснал няколко команди в транзакция и искам сега да се опиташ да я завършиш успешно!"
И очаквам тя да ми отвърне: "Абе ти хубаво ми пусна команди, ама някои от тях изгърмяха, така че няма да стане твоята, защото транзакциите са нещо атомарно и не мога да завърша тази транзакция успешно, заради възникналите грешки."
А не да ми излиза с някакви женски номера от типа: "Еми аз нали ти казах и изревах, че има грешки. Ти въпреки това написа commit, значи си поел отговорност за това и си счел, че грешките не са важни."
Е не, няма такъв номер. Такъв вариант е напълно неприемлив за мен - или транзакциите са атомарни, или не са. В последния случай излиза, че не са. И дори потенциално аз да нося вината за това, пишейки commit, базата не трябва да ми позволява да го правя, защото това противоречи на самата концепция за транзакция.
"Договор, подписан с Русия, струва по-малко от хартията, върху която е написан!" - БисмаркРедактирано от Dakota на 07.12.09 19:25.
|