「式」を格納するスキーマ
リレーショナルモデルで「式*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) |
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:数式や論理式