我正在寻找'反应数据库',但不幸的是我不确定我是否正确称呼它。我想要的是数据库服务器,具有以下属性。我将记录表示为JavaScript对象,但仅用于演示,不需要无模式。
记录(又名行)能够存储功能:
{ "id": 1234,
"name": "cube",
"material": "steel",
"volume": 2.0,
"weight": function() { return this.volume * 8; } }
当询问“重量”时,必须为用户提供值16.0。索引(如果存在)也必须相应地修改。这里没什么特别的,它是冗余的,可以用传统的SQL触发函数实现。
函数可以在其范围内包含其他对象。让我有一个集合(aka表)'材料'与记录:
{ "name": "steel", "density": 8 }
然后将示例转换为:
{ "id": 1234,
"name": "cube",
"material": "steel",
"volume": 2.0,
"weight": function() { return this.volume * materials[this.material].density; } }
我希望数据库在更新钢记录时重新计算“权重”(以及引用materials["steel"].density
的所有其他字段)的值。使用普通的SQL触发器更难实现。但是这种行为可能被称为推动反应。
具有arity的功能可以转移给用户。考虑以下量子力学系统的集合。
{ "name": "QHO",
"angular_frequency": 42,
"energy": function(n) {return this.angular_frequency*1.054*(n+1/2);}
},
{ "name": "particle_in_a_box",
"length": 20,
"mass": 1,
"energy": function(n) {return (1.054*3.14)**2 * n**2 / (2*this.mass*this.length) ;}
}
然后“能量”必须作为闭包返回,带有所有引用的变量。
重新计算指定字段时,应为用户生成通知(如果需要)。
如果有什么准备好的话,请指点我吗?