关于 web 开发 数据库实体的问题

2020-10-10 09:03:09 +08:00
 zxCoder

举个例子,比如博客文章,一篇文章对应多个 tag,那么文章的实体里面要有一个字段 list<string>吗,因为这种一对多的关系数据库应该用另一个表存,这种情况感觉挺常见的,不知道标准的做法应该是怎么做的。

还是说要两个实体类?一个和数据库映射的,一个是处理之后和上层 service 交互的?

最简单的方法应该是怎么做呢?

923 次点击
所在节点    问与答
7 条回复
CoCoMcRee
2020-10-10 09:27:46 +08:00
常规处理的话就
一张 tag 表, 存各种 tag.
一张 文章 id 和 tag 的多对多表, 存文章 id 和 tag 的对应关系.

以上是我写个人博客练习时候的做法.
340244120w
2020-10-10 09:30:23 +08:00
tag 最关键的概念是反向索引,你文章就用一个 string 来存 tags,就做不到反向索引了
zxCoder
2020-10-10 09:49:35 +08:00
@CoCoMcRee 存我知道,查呢?
zxCoder
2020-10-10 09:49:50 +08:00
@340244120w 我没有用一个 string 来存 tags 啊
340244120w
2020-10-10 10:54:48 +08:00
@zxCoder #4
一篇文章对应多个 tag,那么文章的实体里面要有一个字段 list<string>吗
------------------------------------------------------------------------------------
这句话的意思不就是咩。。。
而且文章和 tag 是多对多,不是一对多
passerbytiny
2020-10-10 11:09:04 +08:00
文章对标签是多对多,不是一对多。

只有实体之间才存在关联关系,所以不存在 List < String >类型的关联字段(非关联关系的基本字段,可以有这种类型)。关联字段的类型,若是 List,则必定是 List < Entity >。

建议楼主先从零开始学习一下 ORM 。
cmdOptionKana
2020-10-10 11:27:36 +08:00
推荐一个网站 https://pgexercises.com/ 这个教程学 sql 循序渐进,由浅入深,覆盖的场景也很多,都是通过具体例子来教学。

看这里 https://pgexercises.com/questions/joins/simplejoin.html 看它的三个表,特别注意看中间那个表。
多对多关系通常采用三个表,其中一个表起到桥梁的作用将 tag 表与 article 表连接起来。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/713509

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX