举个例子,比如博客文章,一篇文章对应多个 tag,那么文章的实体里面要有一个字段 list<string>吗,因为这种一对多的关系数据库应该用另一个表存,这种情况感觉挺常见的,不知道标准的做法应该是怎么做的。
还是说要两个实体类?一个和数据库映射的,一个是处理之后和上层 service 交互的?
最简单的方法应该是怎么做呢?
好像大家都看不懂我的问题。。。。 我的问题不是说怎么建表,怎么查。。。
1
CoCoMcRee 2020-10-10 09:27:46 +08:00
常规处理的话就
一张 tag 表, 存各种 tag. 一张 文章 id 和 tag 的多对多表, 存文章 id 和 tag 的对应关系. 以上是我写个人博客练习时候的做法. |
2
340244120w 2020-10-10 09:30:23 +08:00
tag 最关键的概念是反向索引,你文章就用一个 string 来存 tags,就做不到反向索引了
|
4
zxCoder OP @340244120w 我没有用一个 string 来存 tags 啊
|
5
340244120w 2020-10-10 10:54:48 +08:00
@zxCoder #4
一篇文章对应多个 tag,那么文章的实体里面要有一个字段 list<string>吗 ------------------------------------------------------------------------------------ 这句话的意思不就是咩。。。 而且文章和 tag 是多对多,不是一对多 |
6
passerbytiny 2020-10-10 11:09:04 +08:00 via Android
文章对标签是多对多,不是一对多。
只有实体之间才存在关联关系,所以不存在 List < String >类型的关联字段(非关联关系的基本字段,可以有这种类型)。关联字段的类型,若是 List,则必定是 List < Entity >。 建议楼主先从零开始学习一下 ORM 。 |
7
cmdOptionKana 2020-10-10 11:27:36 +08:00
推荐一个网站 https://pgexercises.com/ 这个教程学 sql 循序渐进,由浅入深,覆盖的场景也很多,都是通过具体例子来教学。
看这里 https://pgexercises.com/questions/joins/simplejoin.html 看它的三个表,特别注意看中间那个表。 多对多关系通常采用三个表,其中一个表起到桥梁的作用将 tag 表与 article 表连接起来。 |