咸鱼

咸鱼是以盐腌渍后,晒干的鱼

0%

JPA基于User的收藏文章的关系选择

情景

很多文章,很多用户,用户把喜欢的文章添加在账户下,方便查看自己的收藏记录,但是文章不在本地数据库。

一对多

三张表(用户表,收藏文章表,用户-收藏文章的中间表),一个用户对应多个收藏记录,用户实体类维护关系。
一个收藏记录只能被一个用户所添加,所有每次收藏,都要生成新的收藏记录。

缺点:

  1. 产生多条记录
  2. 每次获取用户实体,都有带收藏记录,比如登录等业务是不需要这部分数据的。

如果2个用户收藏同1篇文章,收藏文章表中间表都会产生两条收藏记录

多对一

两张表(用户表,收藏文章表),多个收藏记录对应一个用户,收藏文章实体类维护关系

每次都要在 收藏文章表 生成新的收藏记录
缺点:

  1. 收藏记录的内容可以重复(不同用户)
    2.获取收藏记录时,会把用户的所有数据都拿出来,包括密码和token这些。
    优点:
  2. 不污染用户实体类
  3. 数据表比较少

如果2个用户收藏同1篇文章,收藏文章表产生两条收藏记录

多对多

三张表(用户表,收藏文章表,用户-收藏文章的中间表),多个用户对应多个收藏记录用户实体类维护关系。

优点:解决多对一一对多的数据重复
缺点:和一对多的获取用户实体一样,都有收藏记录。

最后,以上三个关系还是选择多对一的关系,但是获取收藏记录带有所有的用户数据,这样也不太好,所以最后的最后,不用关系了,在多对一的基础上,用一个用户Id替代了。

各种关系的具体代码看自己的项目 springboot-demo/springboot-demo-mysql

折腾这么久,还真的想用nosql算了,像mongodb的用户文档,想怎么添加收藏记录就怎么添加,哈哈!