Myślę, że pytanie dotyczy odpowiedzialności za jakość danych.
Odpowiedź zależy od tego, jak widzisz system.
Jeśli widzisz bazę danych jako niezależną, odrębną i autonomiczną usługę niezależną od aplikacji, baza danych jest odpowiedzialna za zapewnienie spójności i jakości zawartych w niej danych. Zasadniczo dlatego, że ta baza danych może być używana przez inną aplikację, więc nie może polegać na tym, że druga aplikacja ma taką samą spójność i jakość zachowania. W takich okolicznościach baza danych musi zostać zaprojektowana w taki sposób, aby ujawniała interfejs API i zachowanie autonomiczne. W tym widoku są co najmniej dwie aplikacje, jedna z nich to baza danych, a druga to aplikacja, która z niej korzysta.
I odwrotnie, bazę danych można uznać za skomplikowaną formę pliku, który znajduje się pod bezpośrednią i całkowitą kontrolą aplikacji. W tym sensie baza danych staje się czystym narzędziem do serializacji i nawigacji po dokumentach. Może zapewniać pewne zaawansowane zachowania do obsługi zapytań i obsługi dokumentów (takie jak JSON lub narzędzia XML), ale z drugiej strony nie musi (tak jak większość strumieni plików). W takim przypadku program odpowiada za utrzymanie właściwego formatu i zawartości pliku. W tym widoku jest jedna aplikacja.
W obu widokach kolejnym pytaniem jest, jak obsługiwać korzystanie z bazy danych jako fantazyjnego pliku lub oddzielnej usługi. Możesz to osiągnąć poprzez:
- za pomocą narzędzi udostępnianych przez platformę bazy danych w postaci tabel / widoków / procedur przechowywanych / wyzwalaczy itp.
- zawijanie samej bazy danych w ramach usługi, z której muszą korzystać wszyscy klienci, aby uzyskać dostęp do bazy danych
- zawijanie bazy danych do biblioteki, z której muszą korzystać wszyscy klienci, aby uzyskać dostęp do danych.
Każda z nich ma swoje zalety / wady i będzie zależeć od architektonicznych ograniczeń środowiska, w którym działa system.
Niezależnie od tego, jaki widok bierzesz, zawsze opłaca się sprawdzać poprawność danych na granicach.
- Sprawdź poprawność pól w interfejsie użytkownika wprowadzanych przez użytkownika
- Sprawdź poprawność żądania sieci / interfejsu API przed opuszczeniem klienta
- Sprawdź poprawność żądania sieci / interfejsu API na serwerze, zanim cokolwiek zrobisz
- Sprawdź poprawność danych przekazywanych do reguł biznesowych
- Sprawdź poprawność danych przed utrwaleniem
- Sprawdź poprawność danych po odzyskaniu od trwałości
- i tak dalej
To, ile walidacji jest uzasadnione na każdej granicy, zależy od tego, jak ryzykowne jest jej niepotwierdzenie.
- pomnożenie dwóch liczb razem?
- otrzymałeś zły numer, czy to problem?
- wywoływanie procedury dla danej lokalizacji pamięci?
- Co jest w tej lokalizacji pamięci?
- Co się stanie, jeśli obiekt nie istnieje lub jest w złym stanie?
- za pomocą wyrażenia regularnego w ciągu zawierającym kanji?
- Czy moduł regex może obsłużyć Unicode?
- Czy wyrażenie regularne może obsłużyć Unicode?
However, why not perform validation of data on the application side before storing them into the database?
cóż, te dwa nie wykluczają się wzajemnie. Prawdopodobnie potwierdzisz różne rzeczy po obu stronach. Podczas gdy walidacje po stronie aplikacji są skoncentrowane na biznesie, walidacje w bazie danych są bardziej skoncentrowane na danych. Pomyśl w bazie danych zasilanej przez kilka różnych aplikacji.