也许我还在考虑 sql,但我在为一个简单的博客编写数据模式时遇到了麻烦。
我真的不明白:db/cardinality
属性及其含义。
就这种类型的系统而言,我们如何对这些关系进行建模
最佳答案
查看下图并阅读 https://gist.github.com/a2ndrade/5651419 处的完整代码示例(架构、示例数据和查询) .它应该可以帮助您了解如何在 Datomic 中对数据进行建模。
查询
请注意,某些关系没有明确建模,因为 Datomic 中的关系是双向的,并且您可以使用简单的 Datalog 查询检索其余信息。例如,查询:
(d/q '[:find ?cid ?c
:in $ ?u
:where
[?uid :user/username ?u]
[?aid :article/category ?cid]
[?aid :article/author ?uid]
[?cid :category/name ?c]]
(d/db conn) "john.smith")
查找用户 ("john.smith") 为其撰写文章的所有类别 ID - 及其名称。
收容关系
一个重要的建模决策是让文章指向评论并将关系标记为
:db/isComponent
因为评论不应该单独存在,而是作为文章的一部分。如果文章本身被撤回,Datomic 将确保撤回与文章相关的所有评论。执行业务规则
如果您想强制执行特定于应用程序的一致性规则(例如文章和评论必须有作者,评论必须有一定长度等),您需要使用 database functions .它们在交易者内部运行,可以原子地强制执行任意约束,中止不符合它们的交易。
关于clojure - 在数据中建模多个多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14724991/