Ich habe Geschäftsregeln sowohl in meiner Anwendungsebene (Modelle) als auch in meiner Datenbankebene durchgesetzt (gespeicherte Prozeduren, die Fehler auslösen).Sollen Geschäftsregeln sowohl in der Anwendungsschicht als auch in der Datenbankstufe durchgesetzt werden, oder nur eine der beiden?
Ich habe meine Validierungen in beiden Orten für ein paar Gründe zu duplizieren:
- Wenn die Bedingungen zwischen ändern, wenn sie in dem Anwendungscode überprüft werden, und wenn sie in der Datenbank überprüft, Die Geschäftsregelüberprüfungen in der Datenbank speichern den Tag. Die Datenbank ermöglicht es mir auch verschiedene Datensätze in einer einfacheren Weise als in meinen Anwendungscode zu sperren, so scheint es natürlich hier zu tun.
- Wenn wir haben einige Chargendaten Einfügungen/Aktualisierungen der Datenbank direkt zu tun, wenn ich Route alle diese Operationen durch meine gespeicherten Prozeduren/Funktionen, die die Geschäftsregel Validierungen tun, gibt es keine Chance, mich schlechte Daten, obwohl mir die Schutzmaßnahmen fehlen, die ich bekommen würde, wenn ich Single-Input durch die Anwendung machen würde.
- Während diese Dinge nur in der Datenbank Durchsetzung den gleichen Effekt auf den tatsächlichen Daten hätte, so scheint es ungeeignet nur Daten auf der vor Datenbank wirft zunächst eine gute Mühe, zu überprüfen, ob es entspricht zu Einschränkungen und Geschäftsregeln.
Was ist die richtige Balance?
Was ist der Unterschied zwischen der Durchsetzung der Geschäftslogik und der Durchsetzung der Datenintegrität? Angenommen, ich habe eine Geschäftsregel, die besagt, dass maximal 3 Personen einem Supervisor zugewiesen werden können. Was passiert, wenn ich Person # 4 einfüge, weil es ein Datenintegritätsfehler ist, dass mehr als 3 Personen pro Supervisor beschäftigt sind, oder handelt es sich um eine Regelverletzung? Ohne den Supervisor-Datensatz zu sperren, bevor überprüft wird, dass sich bei der Einfügung maximal 2 Personen unter einem Supervisor befinden, wie kann der Anwendungscode zu 100% sicher sein, dass diese Regel nicht verletzt wird? –
@Rednerln - Änderungsrate. Die Datenbankintegritätsregeln werden wahrscheinlich länger als die Geschäftsregeln als wahr angenommen. Ihr Beispiel von Leuten zu einem Vorgesetzten, ich würde es schwer haben, dies zu einer Datenbankbeschränkung zu machen, wenn ich es tun würde, müsste es datenbasiert sein (udf basierend auf einer Konfigurationseinstellung). Und wenn sich die Regel ändert, muss man sich die Frage stellen, was man mit Daten tun soll, die gegen dieses Prinzip verstoßen. In der Regel möchten Sie Datenbankregeln, die nur entspannt, nicht verschärft oder qualitativ verändert werden. –
@Rednerln - In multimodalen Situationen möchten Sie, dass Benutzer Ihre DB-Zugriffsebene (Ansichten, vielleicht) mit ihren BI-Tools oder was auch immer erreichen können und wissen, dass ihre Annahmen gültig sind, dass die Datenbank Kohäsion und Integrität aufweist Umfang. –