2016-03-30 24 views
1

私は論理式論理式ルール

を持って

ようc=a+b*d何かがリレーショナルデータモデルのセットアップでこれを達成することが可能であると言いますか? ルールをvarcharフィールドにハードコードしたくありません。

私はルールを連鎖させることを検討しています。ルールエンジンの行に何かがありますが、私はそれを純粋にリレーショナルデータベースを使ってやりたいのです。

答えて

2

このような式はツリーです。あなたの例は、ツリーとして表現ツリーの

= 
    c 
    + 
     a 
     * 
     b 
     d 

葉がプリミティブシンボルであり、B、...、(サブ)ツリーの根はオペレータがされています。

そのような木を表現するための簡単なリレーショナルデータベース構造は

、サブツリーの場合には、コンポーネントノードのオペレータと外部キーは、プリミティブの場合に対し、充填される
node(id, operator, left_component_id, right_component_id, primitive) 

あります最後の属性が入力されます。

演算子の数、つまり引数の数が多い場合、または無制限の場合でも、スキーマは複雑になります。別のテーブルが必要です

argument(id, node_id, position, component_id) 

参照ノードの引数を持ちます。

これらのスキームは、リレーショナルデータベースの完全な機能を提供します。たとえば、最初の引数として「a」を持つ式の数を照会することができます。一方、シンプルな表現は、そうした方法で多くのデータベースレコードに散在します。式の内部構造を調べるためにデータベースのメカニズムが必要ない場合は、式全体を文字列として1つのレコードに格納するだけです。

+0

ありがとうございます。 –