Geschäftslogik in Datenbank speichern
Wollen wir einige schreiben von business-Logik Regeln, dass Arbeit auf bestimmte Daten, um Berichte zu erstellen. Nicht sicher, welche ist die beste, um speichern Sie in der Datenbank MySQL.
Kann es eine Kette von Regeln, und dann eine Erklärung für das Ergebnis, wie oben gezeigt.
InformationsquelleAutor der Frage Harsha M V | 2012-07-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für den Aufbau von berichten Sie können die Konvertierung der business-Logik in einer beliebigen Programmiersprache. Und Verwendung von Datenbank-Daten zur Generierung von berichten.
Vor der business Logik in der Datenbank gespeichert
Quelle: Argumente für/gegen die Business Logik in stored procedures
Siehe auch:
InformationsquelleAutor der Antwort Somnath Muluk
InformationsquelleAutor der Antwort RandomSeed
Argument gegen "soft-coding" business-Logik wie diese: http://thedailywtf.com/Articles/Soft_Coding.aspx
InformationsquelleAutor der Antwort Matt Kline
Alles was ich dir geben kann, ist die Art und Weise Sie sollten dieses problem lösen, und nicht die Antwort selbst.
Dem Allgemeinen Entwurf für eine Datenbank zum speichern von komplexen Daten wie diese ist design, wie würden Sie halten Sie Sie im Speicher als Objekte, und versuchen Sie dann, und entwerfen Sie die Datenbank entsprechend. Sie werden auswerten die Regeln in einer Programmiersprache, nachdem alle. Das Verfahren wird wie folgt: Zuerst wird die Klasse Diagramm
Dann ist es Zeit, es zu konvertieren in ein ERD:
Einmal haben Sie die Struktur einer Datenbank zu speichern/laden Sie Ihre Objekt auf/ab können Sie einfach erstellen Sie Ihre Klassen, so dass jedes Objekt ist dafür verantwortlich, load/store selbst.
[UPDATE]
Zum Beispiel, wenn Sie speichern möchten, die Anweisung
a + b * -c
in die Datenbank ein, es könnte übersetzt werden mit den folgenden Einsätzen:InformationsquelleAutor der Antwort Mehran
Also wenn ich das richtig verstanden Sie sind auf der Suche nach front-end verwenden, um Menschen zu erlauben, um dynamisch erstellen Sie Logik, die angewendet wird, um Abfragen (dynamisch erstellte where-Klauseln zu Laufzeit, basierend auf dessen Regeln werden genutzt)?
Wenn das der Fall ist, müssten Sie sich ziemlich spezifisch über was Bedingungen, unter denen Sie auswählen können, in Ihren Regeln (änderung in dem Wert (Spalte), so können Sie nur bedingte Regeln gegen Spalten im dataset ein, das Sie der Berichterstattung aus).
Wenn ich verstehe deine Frage richtig, ich würde anfangen, durch die Zuordnung aus welchen Tabellen/Spalten, die Sie wollen, dass Sie in der Lage, wählen Sie die Bedingungen gegen. Dies wird Ihre Kontrollen für die Webseite zu entwerfen der Regeln.
Allerdings, wenn Sie nur Fragen, wie zur Speicherung der Regeln, sobald Sie gewählt sind in der Datenbank ist, würde ich vorschlagen, Speicherung in einer einzigen Tabelle, die enthält:
Dann, wenn diese Aufzeichnungen erstellt werden, verwenden Sie Sie durch die Injektion der Tabellen in der from-Klausel Spalten in der where-Klausel für dynamic sql.
Ich weiß, das klingt verwirrend, aber was Sie fordern ist eine ziemlich komplexe Lösung. Aber letztlich ist Sie nur speichern wollen, die Regeln zusammen in einem Ort, wo Sie die Schleife durch, um dynamisch zu erstellen und dann ausführen einer SQL um Ihren Bericht zu erstellen. Hoffentlich werden diese Punkte, die Sie in die richtige Richtung.
InformationsquelleAutor der Antwort Hermit
Denke ich, was muss zuerst gemacht werden, ist die Frage, ob oder nicht, sollten Sie es sein, die Regeln in einer Datenbank zu beginnen.
Datenbanken sind eine heavy-handed Lösungund sind oft einfach nicht nötig.
Nachdem befasste sich mit Regel-engines in verschiedenen Formen, einschließlich der Datenbank-getrieben, ich kann Ihnen sagen, es kann sehr frustrierend und unproduktiv, wirklich schnell. Einer der großen Fehler, die ich gesehen habe passiert ist, zu schreiben versucht, Ihre eigenen ad-hoc-Regeln der Sprache und mit diesem zu fahren, bedingte Logik über die Datenbank. Zumindest, verwenden Sie eine Sprache, die bereits nachgewiesen werden (Python, javscript, etc) und Betten, die in es.
Sogar besser, wenn die Bestimmungen sind hinreichend Komplex, ich persönlich bevorzuge zu beschäftigen Excel-Tabellen. Wir verwenden diese für die Automatisierung (handhaben variable Logik, basierend auf der effektiven Datum, etc), und auch das kompilieren Recht komplexe Versicherungs-rating-Logik, um Perl-Skripte Schnittstelle über einen web-service, über dieses Produkt: http://decisionresearch.com/products/rating.html.
Gegensatz dazu speichern die Logik in eine Datenbank im Gegensatz, sagen wir, eine Excel-Tabelle:
Nun natürlich, wie Sie sich vorstellen können, eine web-service-driven Excel rules-engine ist auch nicht zu passen in jeder situation. Und es ist nicht die einzige mögliche Lösung hier.
Was ich hinauswill ist aber, dass stellen Sie sicher, dass Sie die richtige trade-offs in Bezug auf usability/Ausdruckskraft/Prüfbarkeit/Leistung. Wo ich arbeite, Recht zu haben und produktiv zu sein ist wichtiger, als schnell in der Ausführung, so gehen wir mit den Excel - /web-service.
Und zu erweitern slavik262 Kommentar, was Sie wirklich wollen, zu erreichen mit Regel-engines, schließlich ist die Abstraktion und Verallgemeinerung, zu minimieren bewegliche Teile und erhöhen die Zuverlässigkeit, Testbarkeit und Verständlichkeit. Ein Datenbank-Regeln-engine, meiner Erfahrung nach, ist sub-optimal im Vergleich oft auch einfach nur, sagen wir, Java-basierten Regeln. Solange Sie in der Sandbox und organisiert werden, und verstecken sich hinter eine generalisierte und konsistente Schnittstelle, dann funktionieren Sie einwandfrei.
In meinem Unternehmen, es hängt vom Umfang der Regeln und wie oft Sie sich verändern, was wir gehen mit. Rating-Versicherung - Excel, keine Frage. Einige Staatliche spezifische Logik? Schnittstelle Java rule-Dateien genügen in Ordnung.
InformationsquelleAutor der Antwort Jason Antic
Ich vermute, dass der Zweck der Regeln ist es, dem Namen berechnete Felder aus einer vorhandenen Datenbank eine Tabelle (oder Tabellen). Ansonsten, zum reinen Zwecke der Berichterstattung, könnte man einen dump der Daten in Excel, und lassen Sie Benutzer verwenden Excel-Funktionen und pivot-Tabellen für Ihre Zwecke.
Die entscheidende Frage ist, wie werden Sie sich für die Transformation der Regeln in die Tat umzusetzen. Wenn der Zweck ist nur zum speichern von business-Regeln, so können Sie einen Bericht erstellen, der business-Regeln, dann eine einfache Datenstruktur in SQL ist ausreichend.
Jedoch, wenn Sie wollen, schalten Sie die Regeln in code, müssen Sie überlegen, wo der code ausgeführt wird. Wenn die Daten in SQL gespeichert haben, haben Sie mehrere Optionen:
Habe ich eine Neigung zu den ersten dieser. Der primäre Grund dafür ist, dass es Grenzen der tools: SQL.
Ich bin nicht sicher, was Ihre Regeln sind dabei; der Schlüssel ist, was die "Anweisung" - Komponente. Lassen Sie mich davon ausgehen, dass dies eine Konstante oder ein Ausdruck auf Daten, die berechnet werden kann. In diesem Fall, Ihre Regeln Aussehen viel wie eine case-Anweisung. Ein Nachteil ist, dass die Anweisung kann verlangen, suchen mehr als eine Zeile in der Daten-Tabelle (zur Handhabung von Veränderungen über die Zeit).
Meine Empfehlung: speichern Sie diese Regeln in die Datenbank. Diese Lagerung würde erlauben Ihnen, eine Abfrage zu erstellen, die aus einer Sequenz von business-Regeln, die mit SQL Programmierung. Mysql ermöglicht die dynamische SQL (heute). Ohne zu wissen, ein wenig mehr über die zugrunde liegende Tabelle und die Regeln, es ist schwer zu geben, mehr Informationen.
Kann ich sagen, habe ich ein viel komplizierteres system verwendet für die Szenario-Analyse. Die Szenarien selbst wurden gespeichert in Tabellen, in einer Reihe von Tabellen, Konstanten und so weiter -- viel, wie Sie Ihren business-Regeln. Das system funktionierte durch die Verwendung von SQL (und einige Excel) Umwandlung der spreadsheet-Darstellung eines Szenarios in einem (Riesen -) Abfrage. Es könnte dann die Abfrage ausführen, generieren Sie die zugehörigen Berichte. Dieses system hat sich bewährt flexibel, performant und leistungsstark.
InformationsquelleAutor der Antwort Gordon Linoff
Wenn Sie nicht brauchen, um die Suche basierend auf den Komponenten von Regeln können Sie dann speichern Sie die Regel in zwei Feldern in der Datenbank. Die Bedingung, unter der die Anweisung ausgeführt eine und-Anweisung, die ausgeführt wird, in einem anderen.
Ihre Regeln kann gespeichert werden, mithilfe von JSON oder einem ähnlichen format.
Werde ich brauchen, um ein wenig Terminologie definieren, die ich verwenden werde. Es gibt atomaren Bedingungensystem-Werte im Vergleich zu Werten eingegeben durch den Benutzer, der ausgewertet true/false, und komplexen BegriffenBedingungen, kombiniert mit den logischen Operatoren.
In einem atomic Begriffvar bezeichnet einen Wert, der das system (wie die Anzahl der Besucher oder die Anzahl der eindeutigen Besucher). Vergleiche bestimmen, wie die var bewertet werden, gegen die Wert. Die Wert ist eine Zahl oder eine Zeichenfolge, die der Benutzer produziert. Wenn ein var und value sind beides zahlen, Vergleiche "<", "<=", "=", ">=" oder ">". Wenn ein var und value sind beides strings, Vergleiche "ist gleich", "beginnt mit", "endet mit" oder "enthält". Atomare Begriffe können wie folgt gespeichert:
Können Sie speichern die komplexen Bedingungen, die aus Konjunktionen, disjunktionen und Negationen (und/oder/nicht) mit den folgenden Formaten.
Können Sie dann bauen, Aussagen zu bewerten, wahr/falsch mit diesen Methoden. Ein Beispiel ist wie folgt:
Dem obigen Beispiel entspricht dann true, wenn die Zahl der Besucher größer als 1000 ist oder die Anzahl der eindeutigen Besucher ist größer als oder gleich 100 ist, und die Zahl der Besucher ist nicht weniger als 500.
Können Sie dann ausführen, was Sie sich beziehen, als ein "statement", wenn die Regel zu true ausgewertet wird.
InformationsquelleAutor der Antwort Dave F
Einem einfachen Weg, es zu tun, ist die Verwendung eines OODBMS. Es sind Methoden gekapselt, mit Schlitzen in Objekte, und Sie können auch in der Datenbank ausgeführt werden (wie z.B. Trigger).
Nun, wenn Sie darauf bestehen, auf einer SQL-Datenbank, was Sie tun können, ist die Verwendung einer dynamischen Programmiersprache, und haben eine Tabelle zum speichern von code, vielleicht verbunden mit anderen Tabellen oder Zeilen.
Vor ein paar Jahren sah ich eine Ausschreibung für das Steuersystem der Algerischen Regierung, in der Sie geplant, um speichern Sie die business-Regeln (steuerliche Vorschriften), als Visual Basic-code in das RDBMS.
Könnten Sie wählen Sie eine beliebige Sprache, die Sie leicht einbetten der Dolmetscher in Ihrer Anwendung (Common Lisp http://ecls.sourceforge.net ; oder http://common-lisp.net/project/armedbear/ wenn Sie schreiben Ihre Anwendung in Java, Lua, Javascript, Scheme, etc.
Würd es eher zu Gunsten Common Lisp oder Scheme, da mit diesen Sprachen können Sie einfach schreiben Sie eine DSL für die business-Regeln.
Dem gegebenen Beispiel könnte so geschrieben werden, als ein symbolischer Ausdruck wie:
in lisp so ein symbolischer Ausdruck gedruckt werden können, gut lesbar mit der PRINT oder PRINT-TO-STRING-Operatoren, so dass Sie legen Sie diesen Ausdruck in eine SQL-Datenbank:
Und Sie bekommen es zurück von SQL, Lesen Sie es wieder als einen symbolischen Ausdruck, mit dem lisp-READ oder READ-FROM-STRING-Operatoren, und klicken Sie dann mit der rechten DSL, können Sie es bewerten mit dem lisp EVAL-operator:
InformationsquelleAutor der Antwort Pascal Bourguignon
Nur einen möglichen Vorteil der Verwendung von gespeicherten Prozeduren ist die Möglichkeit, den Zugriff auf die Datenbank von Anwendungen, die unterschiedliche Technologien, wie z.B. Python und Java.
InformationsquelleAutor der Antwort Elchin
Ich kann mir vorstellen, dass Sie bereits über die bestehenden business-Logik-Regeln und-Anforderungen dokumentiert?.. Das ist der wichtigste Faktor für die Gestaltung Ihres Schemas, die Auswahl der besten client-tools zur Entwicklung und Gestaltung Ihrer client-Programme und-Verfahren. Ich habe dies für meine Pfandhaus-Management-Anwendung. Die Funktionalität der Anwendung ist voll table-driven. Es hat die Kontrolle-Tabellen, in denen der administrator kann die änderung gültig ist, um Parameter zu ändern, wie das system funktioniert. Bei Kombination mit der strukturierten Programmierung Techniken, dies reduziert die Menge von Programmcode-änderungen. Banking-Anwendungen sind auch ein gutes Beispiel, die komplexe Geschäftsregeln.
InformationsquelleAutor der Antwort Frank R.