入れ子の条件付きロジックを持つフィルタエンジンを設計する必要がある次の問題に直面しています。関数の値と引数を格納するデータベースの設計
私は、各分岐の最初の値が "OR"または "AND"であるツリーとして論理を表しています。第2の値は、例えば、さらに、条件付き構造
と
- 機能
- の名前別のブランチのいずれかであり得る:
$tree = [ 'nodetype' => 'ruleset', 'conditional' => 'OR', 'children' => [ [ 'nodetype' => 'method', 'methodName' => 'startsWith' 'arguments' => [ 'startsWithThis' => 'john', 'subject' => 'john doe' ] ], [ 'nodetype' => 'ruleset' 'conditional' => 'AND', 'children' => [ ...more nesting ] ] ] ];
このツリーを再帰的symfonyのを使用して評価されます式言語コンポーネント(私は
startsWith
などのメソッドのカスタム式を登録しました)。問題は、メソッドが受け入れる引数の数とそれらの引数の順序が互いに異なることです。ツリー全体をjson文字列にシリアライズすることなく、リレーショナルデータベースに格納する方法がわかりません。私は避けたいものです。私がこれまでに思い付いた何
は、次のデータベース構造です:
フィルタ:
- ID
- 名
filter_arguments:
- ID
- filter_id
- 名
filter_usecases:
- ID
- filter_id
filter_usecase_values
- ID
- が をfilter_usecase_id
- filter_argument_id
しかし、この表のデザインは枝の "OR"/"と" 自然を保存する問題に対処しない値。ネストされたフィルタ(例えば、ブランチの親子関係)を表すこともできない。
どうすればよいですか?私がここで達成しようとしていることを記述する特定の用語がありますか?私はこのことについてもっと喜んで読んでいますが、私はGoogleに何を知るかさえしません。データだけ行くから、それを簡単に刺しを取ること
階層データに関する[この記事(http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/)]が役立つ場合があります。 – geoB