Ich denke, die Frage betrifft die Verantwortung für die Qualität der Daten.
Die Antwort hängt davon ab, wie Sie das System sehen.
Wenn Sie die Datenbank als einen unabhängigen, eigenständigen und autonomen Dienst betrachten, der von der Anwendung getrennt ist, ist die Datenbank dafür verantwortlich, die Konsistenz und Qualität der darin enthaltenen Daten sicherzustellen. Im Wesentlichen, weil diese Datenbank von einer anderen Anwendung verwendet werden kann, sodass sie sich nicht darauf verlassen kann, dass diese zweite Anwendung das gleiche Konsistenz- und Qualitätsverhalten aufweist. Unter diesen Umständen muss die Datenbank so konzipiert sein, dass eine API und ein autonomes Verhalten verfügbar gemacht werden. In dieser Ansicht gibt es mindestens zwei Anwendungen, eine davon ist die Datenbank und die andere ist die Anwendung, die sie verwendet.
Umgekehrt könnte die Datenbank als eine komplizierte Form von Datei betrachtet werden, die unter der direkten und vollständigen Kontrolle der Anwendung steht. In diesem Sinne entwickelt sich die Datenbank zu einem reinen Serialisierungs- und Dokumentennavigationswerkzeug. Es bietet möglicherweise einige erweiterte Verhaltensweisen zur Unterstützung der Abfrage- und Dokumentwartung (wie dies bei JSON- oder XML-Tools der Fall ist), muss dies jedoch nicht (wie bei den meisten Dateistreams). In diesem Fall liegt es ausschließlich in der Verantwortung des Programms, das richtige Format und den richtigen Inhalt in der Datei beizubehalten. In dieser Ansicht gibt es eine Anwendung.
In beiden Ansichten lautet die nächste Frage, wie die Verwendung der Datenbank als ausgefallene Datei oder als separater Dienst unterstützt werden kann. Sie könnten dies erreichen durch:
- Verwenden der von der Datenbankplattform bereitgestellten Tools in Form von Tabellen / Ansichten / gespeicherten Prozeduren / Triggern / etc ...
- Umschließen der Datenbank selbst in einen Dienst, den alle Clients verwenden müssen, um auf die Datenbank zuzugreifen
- Umschließen der Datenbank in eine Bibliothek, die von allen Clients verwendet werden muss, um auf die Daten zugreifen zu können.
Jedes hat seine eigenen Vor- und Nachteile und hängt von den architektonischen Einschränkungen der Umgebung ab, in der das System arbeitet.
Unabhängig davon, welche Ansicht Sie vertreten, lohnt es sich immer, Daten an Grenzen zu validieren.
- Überprüfen Sie die Felder auf einer Benutzeroberfläche, die ein Benutzer eingibt
- Überprüfen Sie die Netzwerk- / API-Anforderung, bevor sie den Client verlässt
- Überprüfen Sie die Netzwerk- / API-Anforderung auf dem Server, bevor Sie etwas unternehmen
- Überprüfen Sie die Daten, die an Geschäftsregeln übergeben werden
- Überprüfen Sie die Daten, bevor Sie sie beibehalten
- Überprüfen Sie die Daten, nachdem sie aus der Persistenz abgerufen wurden
- so weiter und so fort
Wie viel Validierung an jeder Grenze erforderlich ist, hängt davon ab, wie riskant es ist, sie nicht zu validieren.
- zwei Zahlen miteinander multiplizieren?
- Sie bekommen die falsche Nummer ist das ein Problem?
- Aufrufen einer Prozedur an einem bestimmten Speicherort?
- Was ist in diesem Speicherort?
- Was passiert, wenn das Objekt nicht existiert oder sich in einem schlechten Zustand befindet?
- Verwenden Sie einen regulären Ausdruck für eine Zeichenfolge, die Kanji enthält?
- Kann das Regex-Modul Unicode verarbeiten?
- Kann der Regex mit Unicode umgehen?
However, why not perform validation of data on the application side before storing them into the database?
Nun, diese beiden schließen sich nicht gegenseitig aus. Es ist wahrscheinlich, dass Sie auf beiden Seiten unterschiedliche Dinge validieren. Während die Validierungen auf der Anwendungsseite geschäftsorientiert sind, sind die Validierungen auf der Datenbank datenzentrierter. Denken Sie in einer Datenbank, die von mehreren und unterschiedlichen Anwendungen gespeist wird.