Clojure 基于另一个属性更改架构属性基数
我有以下伪模式: (A) (B) 我试图避免任何一种带有超级类“成本计划”和子类“周期性”和“一次性”的讨厌的层次结构。首先,我使用的clojure不是OO。也不想落入利斯科夫替补陷阱 因此,作为Datomic的新手,是否有一种方法可以动态更改模式,以便基于另一个属性值修改属性基数。在这种情况下,如果周期为“false”,我们不需要周期开始,周期结束。如果Periodic为“true”,那么我们需要强制这些属性具有值 我的直觉说,这是不可能的。如果没有,我如何在DB中强制执行?在我看来,如果我必须在将事务提交给事务处理程序之前显式验证事务,那么我实际上只是在Datomic约束之外定义了一个模式,这似乎并不明智,考虑到许多微系统将从数据库中写入/读取,协调人类编写“正确”代码是很困难的Clojure 基于另一个属性更改架构属性基数,clojure,datomic,Clojure,Datomic,我有以下伪模式: (A) (B) 我试图避免任何一种带有超级类“成本计划”和子类“周期性”和“一次性”的讨厌的层次结构。首先,我使用的clojure不是OO。也不想落入利斯科夫替补陷阱 因此,作为Datomic的新手,是否有一种方法可以动态更改模式,以便基于另一个属性值修改属性基数。在这种情况下,如果周期为“false”,我们不需要周期开始,周期结束。如果Periodic为“true”,那么我们需要强制这些属性具有值 我的直觉说,这是不可能的。如果没有,我如何在DB中强制执行?在我看来,如果我必
非常感谢您对如何克服这一挑战的任何帮助。我看到您的问题有两个小答案 首先,Datomic不定义“对象”。它实际上更接近于一张普通的地图。实体B有实体A没有的3个字段。这很好,不受Datomic的任何控制。每个属性值对都可以独立于任何其他实体添加到任何实体。仅仅因为一个地图有4个条目,它与另一个有7个条目的地图没有关系,即使地图A中的所有键也在地图B中 第二个子答案是,你的应用程序必须进行所有验证和完整性检查-Datomic不会。SQL等中没有类似于“UNIQUE NOT NULL”的选项。但是,Datomic确实支持有机会中止任何未通过用户提供的测试的事务。因此,这是实施数据完整性检查的一种方法 请也看看,我写的一个库,使使用Datomic更加轻松
-- Cost-schedule: FRE494
-- Periodic: false
-- Type: Fixed
-- Value: 70.00
-- CCY GBP
-- Cost-schedule: GHK999
-- Periodic: true
-- Period start: 01/04/2015
-- Period end: 30/04/2015
-- Type: Promise
-- Filled: false
-- Value: 0.00
-- CCY: GBP