「式」を格納するスキーマ

リレーショナルモデルで「式*1」を格納したい場合、というのは難しいですよね。

例えば以下の様に。こんなイメージのテーブルがあって、こんなSQLを飛ばすとこんな感じで返ってくるようなテーブル設計ですね。

TABLE t_value

value_id value
a 30
b 2
c false
d 16
e true

普通のテーブルです。いや、valueカラムに数値型とBOOL型が混在していますが、まぁイメージということで。

TABLE t_formula

formula_id formula
1 (a+b)/d
2 sqrt(d)*2
3 !(c OR e)

formula中のaとかbとかが、t_value.value_id にFKしているようなイメージです。

SQLっぽいもの

SELECT formula FROM t_formula WHERE formula_id = 1;
  --> 2

SELECT formula FROM t_formula WHERE formula_id = 2;
  --> 8

SELECT formula FROM t_formula WHERE formula_id = 3;
  --> false

こういうのって、可能なんでしょうか…。XMLDBであれば出来そうな雰囲気があるんですが。RDBでの方法をご存知の方、いらっしゃいませんか。

要件として、

  • formulaは常に変化していく。従って、アプリケーションにハードコーディングする訳にはいかない。同様に、ストアドプロシージャも不適であると思われる。
  • 例のテーブルでは、数値型とBOOL型が混在しているが、あくまでも例なので、混在する必要はない。
  • 「式」は、例では、formulaカラム1つに格納しているが、必要ならば分解して格納しても構わない。
  • ノリで sqrt とか使っちゃってますが、とりあえず四則演算と論理演算ができれば…。

*1:数式や論理式