假设我有想要存储在datomic中的实体。如果这些属性都是事先知道的,我只需将它们添加到我的数据模式中,然后再使用它们。
如果除了已知属性之外,实体可以具有任意数量的任意键,映射到任意值。当然,我可以将该列表存储在一些“blob”属性中,我也将其添加到模式中,但后来我无法轻松查询这些属性。
我提出的解决方案是在datomic中定义key
和value
属性,每个属性类型为string
,并处理其中每个附加键/使用上述属性将条目值作为实体的值。然后我可以使用ref
类型通过1:n关系将所有这些键/值实体连接到实际实体。
这允许我查询。这是要走的路还是有更好的方法?
答案 0 :(得分:3)
我不愿意失去属性定义的力量。可以随时添加Datomic属性,并且限制相当高(2 ^ 20),因此在动态键和值出现时对其进行建模可能是合理的,为每个创建一个新属性。