Ich arbeite an etwas wie eine Wizard-Anwendung, um Benutzern zu ermöglichen, einfache "Skripte" zu erstellen, die basierend auf bestimmten Bedingungen grundsätzlich Aktionen ausführen. Skripte, die sie erstellen, werden in einer Datenbank gespeichert, und Modifikationen werden üblich sein, so dass eine Art von Vorwärts-Nur-Text-Generierung keine Option ist. Mein Programm konvertiert diese interne Datenbankstruktur in die eigentliche Skriptausgabe, die ich benötige. Daher werde ich die Ausgabe nur neu generieren, wenn sie ihr Skript ändern.Datenbankentwurf für bedingte Aktionen
Ich suche einen Ratschlag über eine gute Datenbankstruktur, um diese Informationen speichern zu können. Ich habe im Moment eine Arbeit, aber ich bin nur neugierig, wenn ich etwas Offensichtliches vermisse, das es ein wenig machen würde Reiniger. Irgendwelche Vorschläge werden geschätzt.
etwas ausführlicher zu geben, ist hier ein genericized Beispiel für die Art von „Skript“ ein Benutzer durch Kommissionierung Bedingungen und Aktionen in der GUI erstellen:
if ($variableA == 100 && $variableB > 25 && $variableC < 10)
{
performAction();
performAnotherAction();
if ($variableC == 0)
{
performYetAnotherAction();
}
else if ($variableC == 1 || $variableC == 2)
{
performEvenMoreActions();
}
}
else
{
performDefaultAction();
}
Einige Hinweise über das, was ist und was nicht möglich, nur so, dass es klar:
- „if“ conditionals eine beliebige Anzahl von haben kann „else if“ conditionals angebracht ist, sowie ein optionales „else“.
- jede bedingte kann eine beliebige Anzahl von "Tests" (
$variableA == 100
, etc.), aber jeder Test kann als dargestellt werden, gibt es keine Notwendigkeit, sich über komplexere Bedingungen sorgen. - obwohl jede Bedingung eine beliebige Anzahl von Tests haben kann, wird ihnen immer derselbe boolesche Operator beigefügt. Das heißt, wenn mehrere Tests in einer Bedingung vorhanden sind, werden sie entweder immer durch
&&
verbunden oder immer durch||
verbunden, es gibt keine Mischung. - Bedingungen können unendlich verschachtelt werden, daher ist eine Art von hierarchischer Struktur notwendig.
- Innerhalb von Bedingungen kann es eine beliebige Anzahl von Aktionen geben, die in der gleichen Reihenfolge ausgeführt werden müssen, in der sie definiert sind. Aktionen können einfach als Funktionsname dargestellt werden, Sie müssen sich keine anderen "Aktionstypen" vornehmen.
Ja, das ist wahr genug. Ich glaube, ich habe nur versucht, meine Optionen für die Zukunft offen zu halten, aber vielleicht übertreibe ich. –
Es ist in Ordnung, wenn Sie die Skripte ändern müssen. Aber ein RDBMS ist nicht das beste Werkzeug für diesen Job. Der Versuch, ein Skript in syntaktische Elemente zu zerlegen und sie in der Datenbank zu speichern, wird zukünftige Flexibilität eher behindern als helfen. –