gpt4 book ai didi

django - 性能:在 PostgreSQL ArrayField 中存储点赞(Django 示例)

转载 作者:行者123 更新时间:2023-11-29 12:35:16 39 4
gpt4 key购买 nike

我有 2 个模型:PostComment,每个模型都可以被 User 点赞。

  1. 当然,应该在每个 PostComment

    附近的某处呈现总赞数
  2. 而且每个用户 都应该有一个包含所有喜欢的内容的页面。

所以,最明显的方法就是使用 m2m 字段,这似乎会在将来导致很多问题。

那这个呢?

  1. PostComment 模型应该有一些

    users_liked_ids = ArrayField(models.IntegerField())

  2. User 模型也应该有这样的字段:

    posts_liked_ids = ArrayField(models.IntegerField())comments_liked_ids = ArrayField(models.IntegerField())

每次 User 喜欢某样东西时,都会执行两个操作:

  1. 用户的 id 添加到帖子/评论的 users_liked_ids 字段

  2. 帖子/评论的 ID 添加到用户的 posts_liked_ids/comments_liked_ids 字段

问题是:

  1. 这个计划好吗?

  2. 在这种方法中进行查找以获取“该帖子/评论是否被点赞但当前用户是否有效”

  3. 将喜欢存储在一些单独的表中会更好,而不是在喜欢的模型中,但也在 ArrayField

  4. 留在明显的 m2m 中可能更好?

最佳答案

1) 编号
2) 绝对不是。
3)绝对,难以置信。不要进一步拆分您的数据。
4) 是的。

以下是一些问题:

  • 没有引用完整性,因为您不能在数组元素上创建外键,这意味着您很容易在 ID 数组中包含垃圾值
  • 具有用户 ID 的帖子和具有帖子 ID 的用户的数据重复意味着信息可能会不同步(删除用户或帖子时会发生什么?)
  • 匹配数组中的低效查找(您的#2)

在任何情况下都不要这样做。您可能希望结合“发布”和“评论”模型来简化关系,但这就是联结表的用途。数组适用于不涉及外键或可能出现极端长度的用例。

关于django - 性能:在 PostgreSQL ArrayField 中存储点赞(Django 示例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50275903/

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