我正在开发一个使用datomic的webapp。像每个webapp一样,我有一个用户管理,我希望将其作为一个单独的模块/库提供。
现在我的想法是拥有一个带有电子邮件,密码和启用标志的基本用户架构。然后,每个使用我的用户库的库都会添加其他特定于域的用户属性。
所以我会有两个这样的模式:
{:db/id #db/id [:db.part/db],
:db/ident :friendui
:db.install/_partition :db.part/db
:db/doc "The partition of the database for releases"}
{:db/id #db/id [:db.part/db]
:db/ident :friendui/id
:db/valueType :db.type/uuid
:db/cardinality :db.cardinality/one
:db/unique :db.unique/identity
:db.install/_attribute :db.part/db
:db/doc "A unique identifier for any element"}
;; users
{:db/id #db/id [:db.part/db]
:db/ident :user/email
:db/index true
:db/unique :db.unique/identity
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one
:db.install/_attribute :db.part/db}
]...
使用用户库的lib如下:
{:db/id #db/id [:db.part/db],
:db/ident :lweb
:db.install/_partition :db.part/db
:db/doc "The partition of the database for releases"}
{:db/id #db/id [:db.part/db]
:db/ident :lweb/id
:db/valueType :db.type/uuid
:db/cardinality :db.cardinality/one
:db/unique :db.unique/identity
:db.install/_attribute :db.part/db
:db/doc "A unique identifier for any element"}
;; users
{:db/id #db/id [:db.part/db]
:db/ident :user/attr1
:db/index false
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one
:db.install/_attribute :db.part/db}
...
现在我看到的问题是我有两个不同的分区应该合并到其中。 有没有办法用datomic解决这个问题?
更新我想的越多,我就越想我必须在使用库中定义架构并声明用户库在架构中需要什么。
答案 0 :(得分:1)
设计明智,我认为正确的方法是让你的库与模式无关。
如果您正在构建的是库,则不应在其中定义架构。
替代方案是:
第二种方法只是将架构字段映射到已知的库关键字,例如:email和:friendui。
第一种方法甚至与数据库无关。