gpt4 book ai didi

clojure - 在数据中建模多个多对多关系

转载 作者:行者123 更新时间:2023-12-04 02:43:51 25 4
gpt4 key购买 nike

也许我还在考虑 sql,但我在为一个简单的博客编写数据模式时遇到了麻烦。
我真的不明白:db/cardinality属性及其含义。

就这种类型的系统而言,我们如何对这些关系进行建模

  • 系统支持多用户
  • 每个用户可能有多个类别
  • 每个用户可能有很多文章
  • 每个类别可能有多个用户
  • 每个分类可能有很多文章
  • 每篇文章可能有很多评论
  • 每条评论都有一个用户
  • 最佳答案

    查看下图并阅读 https://gist.github.com/a2ndrade/5651419 处的完整代码示例(架构、示例数据和查询) .它应该可以帮助您了解如何在 Datomic 中对数据进行建模。

    Datomic Schema: Blog

    查询

    请注意,某些关系没有明确建模,因为 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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com