Hallo Valle,
mir wird klar, wo Dein "Problem" liegt. Die Frage ist eigentlich nicht, ob man die Regeln in einer Datenbank ablegen kann, sondern wie man dort Bedingungen ablegen kann.
Vielleicht sollte ich mal dazusagen, dass ich regelmäßig per
SQL SQL generiere und dann ausführe. Zumindest bei Oracle klappt das hervoragend.
Wir haben mal ein System erstellen müssen, in dem es dutzende von Tabellen gab, in denen sehr variable Bedingungen abzulegen waren. Wir haben das in der Form gelöst, dass in den Tabellen quasi Teile der zu erstellenden Datenbankabfragen enthalten waren, aber so, dass nicht
SQL-kundiges Personal in der Lage war, diese Bedingungen zu pflegen. Aus den Inhalten dieser Tabellen wurden dann zur Laufzeit per
SQL SQL-Statements (bzw. die Wherebedingungen) generiert und dann ausgeführt. Das Ergebnis der so erstellten Abfragen wurde dann von Datenbankpackages oder Programmen weiterverarbeitet. Teils zur Befüllung neuer Tabellen oder zur Ausgabe von Listen,
XML-Dateien... Wäre ein derartiges Vorgehen für euch eine Option?
Ein Beispiel:
Code:
Ferienhaus Ding Tage Preis ProPerson ProNacht
Ferienhaus 1 Zimmerservice >5 0,00€ - -
Ferienhaus 1 W-LAN =1 2,00€ - ja
Ferienhaus 1 Frühstück =1 4,50€ ja ja
Ferienhaus 2 Zimmerservice >7 15,00€ - -
Ferienhaus 3 Zimmerservice =0 0,00€ - -
Ferienhaus 3 Hund =1 15,00€ - -
Ferienhaus 4 Zimmerservice =7 0,00€ - -
Ferienhaus 4 Hund >2 7,50€ - -
Ferienhaus 5 Zimmerservice =7 2,00€ ja -
Ferienhaus 5 Hund =1 0,50€ - ja
Das soll jetzt heißen: Beim Ferienhaus 1 gibt es den Zimmerservice kostenlos dazu, wenn das Ferienhaus über 5 Tage gebucht wurde, bei Ferienhaus 2, wenn mehr als 7 Tage gebucht wurde. Im Ferienhaus 3 gibt es keinen Zimmmerservice, ein Hund kostet insgesamt grundsätzlich 15 €. Im Ferienhaus 1 kostet das W-LAN pro Übernachtung 2,00 € und pro Person kann man pro Übernachtung für 4,50 € ein Frühstück erhalten.
Im Ferienhaus 4 gibt es alle 7 Tage einen kostenlosen Zimmerservice. Diese Leistung ist auch im Ferienhaus 5 verfügbar, dort kostet sie aber pro Person 2,00 €.
Im Ferienhaus 4 kostet ein Hund bei einem Aufenthalt über 2 Tage pauschal 7,50 €, während im Ferienhaus 5 ein Hund pro Übernachtung 0,50 € kostet.
Ergibt dies eine Vorstellung von dem, was ich meine?
Code:
Im Geamtpreis sind enthalten:
# if ferienhaus.id in (42, 21, 33, 34, 45, 75, 23, 22):
# if (buchung.bis - buchung.von) > 5:
eine Zwischenreinigung
# elseif (buchung.bis - buchung.von) > 10:
zwei Zwischenreinigungen
# endif
# elseif ferienhaus.id in (102, 54, 101):
Das kommt eigentlich sehr nah an meine Vorstellungen heran, nur würde ich versuchen dies per
SQL abzubilden. Die FerienhausID würden wir in meinem Beispiel oben ja wiederfinden, Ferienhaus 1 steht dort ja nur der besseren Lesbarkeit wegen, in der
DB wäre es der technische Schlüssel, ebenso bei den "Dingen". Wenn wir nun per
SQL auf die Tabelle oben zugreifen, so finden wir den Wert > 5, die Zeitdifferenz zwischen buchung.von und buchung.bis können wir auch per
SQL errechnen, kombiniert mit dem gefundenen > 5 ist also auch diese Bedingung gefunden und der Preis berechenbar.
Die Hürde, vor der Du stehst ist mir klar geworden. Ad hoc kann ich Dir jetzt auch nicht sagen, wie man das in eine Datenbank legt, dazu müsste man tatsächlich zuerst einmal einen möglichst vollständigen Überblick über die Regeln haben, um dann eine passende Struktur zu finden und zu entscheiden, wieviele Tabellen in welcher Struktur erforderlich werden. Klar ist aber auch, dass die Implementierung all dieser Regeln nur im Quelltext, egal ob ein Plugin oder n, erheblichen Aufwand bereiten wird und die Pflege extrem hoch werden kann.
Solche Regeln darf es im Programmcode nicht geben:
Code:
if ferienhaus.id in (42, 21, 33, 34, 45, 75, 23, 22):
Hier muss irgendeine Datenbasis herangezogen werden, so dass die Programmlogik sich auf die Berechnung für ein konkretes Ferienhaus beziehen kann.
Ist es möglich für 2 oder 3 Ferienhäuser einmal eine (Excel)-Tabelle zu erstellen, in der alle Regeln ausformuliert dargestellt sind?
Der Screenshot zeigt eigentlich genau das, was ich mir auch vorgestellt habe, beim Design scheinen die Vorstellungen nicht weit auseinander zu liegen.
Perlsau beschreibt eigentlich mit seinen Worten sehr genau das, was ich meine. Momentan gehe ich noch davon aus, dass eine Datenbanklösung für euer System im Rahmen des Möglichen ist.
Zitat von
mjustin:
Das Ändern und Anpassen in der Datenbank ist einfacher als das ändern von Code?
Ja natürlich. Tabelleninhalt ändern, commit und die Regel funktioniert. Kein neues Kompilieren, kein neues Testen, keine neue Auslieferung eines Programmes.
Zitat von
mjustin:
In objektorientiertem Delphi Code, der auch problemlos durch
Unit-Test abgesichert werden kann, halte ich Implementierung für deutlich flexibler. Wer mag und die Zeit hat, kann sich natürlich auch einen Generator für Tabellen und Abfragen programmieren, der in der Lage ist eine bestehende Datenbank sogar im laufenden Betrieb auf neue Regeln upzugraden
Aus genau diesem Grund haben wir ein System auf die Steuerung durch Datenbanktabellen umgestellt, weil wir mit dem Einpflegen der Änderungen in den Programmcode nicht mehr nachkamen. Die Änderungen kamen schneller, als wir die Programme, Bibliotheken... ändern, testen und ausliefern konnten. Offensichtlich haben wir aber auch sehr unterschiedliche Ansichten davon, was ein Regelwerk ist. Du siehst darin (vermutlich) eine einmalige Sammlung mehr oder weniger aufwändiger Regelungen, die dann aber für "immer" bestand haben. Hier in dem Beispiel von Valle gehe ich aber davon aus, dass sich die Regel pro Ferienhaus, pro Saison... sehr flexibel und häufig ändern können. Jederzeit können neue Ferienhäuser hinzukommen oder wegfallen. Optionen hinzukommen oder wegfallen. Von einem statischen System dürfen wir hier wohl kaum ausgehen. Und wenn in dem Unternehem dann für jede Änderung, jedes neue Ferienhaus... eine Unterschrift der Geschäftsführung zwecks Erlaubnis zur Änderung der Regel erforderlich sein sollte, dann liefe da was grundlegend falsch.
@generic: Ich weiß seit ca. 50 Jahren, dass ich nicht richtig schreiben kann. Dafür stehen meine Schreibfehler unter der
GPL und können von allen kostenlos jederzeit beliebig häufig genutzt werden.
English schreibt man im Deutschen übrigens mit sch.
Spar Dir bitte solche Belehrungen, sie sind für die Problemlösung nicht zielführend und zum Glück machst Du ja keine Schreibfehler