加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

clojure – 对数据库中的多对多关系进行建模

发布时间:2020-12-12 08:38:32 所属栏目:MsSql教程 来源:网络整理
导读:也许我还在思考sql,但是我在编写一个简单的博客的数据库模式时遇到麻烦. 我真的不明白:db / cardinality属性及其含义. 在这种类型的系统中,我们如何模拟这些关系 系统支持多个用户 每个用户可能有很多类别 每个用户可能有很多文章 每个类别可能有很多用户 每
也许我还在思考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.它们可以在转换器内部运行,并可以原子地强制执行任意限制,中止事务不遵守.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读