Wpis z mikrobloga

@fiolkins: W dodatku po stronie bazy danych to w zasadzie jedyny sposób na zachowanie konsystencji. Niewiele osób się tym przejmuje, ale domyślny poziom izolacji transakcji w wielu silnikach bazodanowych - committed read, gdyby nie np. unikalne klucze, to pozwoli na dodanie duplikatów. Zresztą bardzo łatwo jest taki case odtworzyć, bo wystarczy zatrzymać transakcję bazodanową na zwykłym insercie w debuggerze i puścić drugi raz ten sam request.
Bo taka walidacja jest też zazwyczaj po stronie apki. Np. żeby dodać Screening to musi istnieć jakiś Film.


@Nofenak: W ogólności walidację warto mieć na każdej warstwie, czyli baza danych + backend + frontend. Twój przypadek oczywiście nie dotyczy tego ostatniego. Dodatkowo im więcej takich checków może za Ciebie zrobić baza danych, tym lepiej. Długoterminowo będziesz miał dzięki temu większą gwarancję spójności danych.

committed read, gdyby nie np. unikalne klucze, to
@Nofenak: możesz używać bazy na różne sposoby. WIększość używa takich constraintów, bo jest to wygodne. Aplikacja jest dużo bardziej elastyczna niż baza danych i jeśli nie masz jakiegoś event sourcingu (tj. bazę można odtworzyć) to powinieneś dbać o to, żeby baza sprawdzała najważniejsze założenia odnośnie modelu bazy