Walidację lepiej robić na poziomie tak zwanego języka bazy danych, czyli trigery itp, niż na poziomie back-end, bo jest za duże ryzyko, że ktoś zmieni back-end i skasuje walidację. Przypominam że aplikacje są zwykle trójwarstwowe, część front-end, back-end, i serwer bazy danych SQL. Części te są niezależne i komunikują się ze sobą. Triger na poziomie bazy danych zwraca komunikat, że dane są niepoprawne. Powinien podać kod błędu i z tego kodu wiesz jaki komunikat dać użytkownikowi. Ze względu na współdzielenie, konieczne jest dokonywanie zmian z użyciem transakcji. W pętli wykonujesz kilkakrotnie próby zmiany rekordu, po losowym odstępie czasowym aż nie ma komunikatu o niepowodzeniu. Jeśli kolejna próba kończy się niepowodzeniem, wycofujesz transakcję w bloku obsługi wyjątku. Ostatnia instrukcja przed blokiem obsługi wyjątku zatwierdza transakcję.