Je travaille sur quelque chose d'une application de type assistant pour permettre aux utilisateurs de créer des «scripts» simples qui effectuent essentiellement des actions basées sur certaines conditions. Les scripts qu'ils construisent seront stockés dans une base de données, et les modifications seront fréquentes, donc une sorte de génération de texte uniquement en avant n'est pas une option. Mon programme convertit cette structure de base de données interne à la sortie de script dont j'ai besoin, donc je vais juste re-générer la sortie à chaque fois qu'ils modifient leur script. Je cherche un conseil sur une bonne structure de base de données pour pouvoir stocker cette information. J'en ai un qui travaille en ce moment, mais je suis simplement curieux si j'ai manqué quelque chose d'évident qui le rendrait un peu nettoyeur. Toutes les suggestions sont appréciées.Conception de base de données pour les actions conditionnelles
Pour donner plus de détails, voici un exemple genericized du type de « script » un utilisateur peut créer par la cueillette des conditions et des actions dans l'interface graphique:
if ($variableA == 100 && $variableB > 25 && $variableC < 10)
{
performAction();
performAnotherAction();
if ($variableC == 0)
{
performYetAnotherAction();
}
else if ($variableC == 1 || $variableC == 2)
{
performEvenMoreActions();
}
}
else
{
performDefaultAction();
}
Quelques notes sur ce qui est et ne possible, juste pour que ce soit clair:
- "si" les conditionnels peuvent avoir un certain nombre de conditions "else if", ainsi qu'un "else" facultatif. Chaque condition peut avoir n'importe quel nombre de "tests" (
$variableA == 100
, etc), cependant chaque test peut être considéré comme étant(<variable>,<operator>,<test value>)
, il n'y a pas besoin de s'inquiéter des conditions plus complexes. - Même si chaque condition peut avoir un nombre quelconque de tests, ils seront toujours joints par le même opérateur booléen. Autrement dit, s'il y a plusieurs tests dans un conditionnel, ils sont toujours soit joints par
&&
, soit toujours joints par||
, il n'y a pas de mixage. - Les conditions peuvent être imbriquées à l'infini, donc une sorte de structure hiérarchique est nécessaire.
- À l'intérieur des conditionnelles, il peut y avoir un nombre quelconque d'actions qui doivent être exécutées dans la même séquence que celle définie. Les actions peuvent simplement être représentées comme un nom de fonction, il n'y a pas d'autres types d'actions.
Oui, c'est vrai. Je suppose que j'essayais juste de garder mes options ouvertes pour l'avenir, mais peut-être que je suis en train de concevoir. –
C'est très bien si vous avez besoin de pouvoir modifier les scripts. Mais un SGBDR n'est pas le meilleur outil pour ce travail. Essayer de décomposer un script en éléments syntaxiques et de les stocker dans la base de données entravera, plutôt que d'aider, la flexibilité future. –