2016-03-30 13 views
1

Ich habe ein logischer AusdruckLogische Ausdrücke Regeln in relationalen Datenmodell

sagen c=a+b*d so etwas wie

Ist es möglich, diese in einem Setup-relationalen Datenmodell zu erreichen? Ich möchte die Regel in einem varchar-Feld nicht fest codieren.

Ich betrachte die Verkettung der Regeln. Etwas auf der Linie einer Regel-Engine, aber ich möchte es rein mit relationalen Datenbank tun.

Antwort

2

Ein solcher Ausdruck ist ein Baum. Ihr Beispiel, ausgedrückt als Baum ist

= 
    c 
    + 
     a 
     * 
     b 
     d 

Die Blätter des Baumes sind die primitiven Symbole a, b, ..., während die Wurzeln der (sub) Bäume sind die Betreiber.

Eine einfache Struktur relationale Datenbank solche Bäume sind

node(id, operator, left_component_id, right_component_id, primitive) 

wo im Fall einer Teilstruktur die Betreiber und die Fremdschlüssel für die Komponenten Knoten gefüllt werden darstellen, während bei einem primitiven, Das letzte Attribut wird gefüllt.

Wenn die Anzahl der Argumente Ihrer Operatoren hoch oder sogar unbegrenzt ist, wird das Schema komplizierter. Sie benötigen eine separate Tabelle

argument(id, node_id, position, component_id) 

, die die Argumente des referenzierten Knotens enthält.

Diese Schemata bieten Ihnen die volle Leistung relationaler Datenbanken. Z. B. können Sie abfragen, wie viele Ihrer Ausdrücke "a" als erstes Argument haben. Auf der anderen Seite wird ein einfacher Ausdruck auf so viele Datenbankdatensätze verteilt. Wenn Sie die Mechanismen der Datenbank nicht benötigen, um die innere Struktur Ihrer Ausdrücke zu überprüfen, können Sie den gesamten Ausdruck als Zeichenfolge in einem einzigen Datensatz speichern.

+0

Vielen Dank für die Details. –