【问题标题】:Pinned Posts Modeling: having pinned flag column inside "posts" table VS having pinned_posts table固定帖子建模:在“帖子”表中具有固定标志列 VS 具有 pinned_posts 表
【发布时间】:2019-05-06 03:37:47
【问题描述】:

上下文

我已经在 Rails 中实现了一个基本的发布系统,因此,我有一个包含以下列的“posts”表:id、user_id、body、created_at、updated_at。

我想让用户能够固定他们的帖子(一次只能发布一个帖子,因此是 has_one 关系)

问题

我看到了两种实现方式:

  • 在“帖子”表中添加“固定”布尔列
  • 添加具有以下列的“pinned_posts”表:id、user_id、post_id、created_at、updated_at

以上两种方式的优缺点是什么?

【问题讨论】:

    标签: mysql ruby-on-rails database database-performance


    【解决方案1】:

    由于您限制每个用户发布一个帖子,您可以在Users 表中填写post_idNULL

    这强制执行每用户 1 个规则,并且(可能)具有最小的开销。

    你还没有说置顶帖子会发生什么;可能还有其他问题。您是否需要找到所有置顶的帖子(需要对Users 进行昂贵的扫描)?您想在显示用户信息时标记特定帖子吗? (这样会很有效。)

    我可以建议您学习一些数据库的基础知识吗?第三方软件(在本例中为“R”)并不能真正保护程序员免受数据库概念的影响。

    【讨论】:

    • 嗨瑞克,谢谢你的回答!我对将 post_id 添加到 users 表有两个担忧。 1) users 表将有一个与用户实体不直接相关的新属性。 2)如果我们假设我为任何 1-per-user 关系采用此策略,我将以一个充满 NULL 列的 users 表结束。要回答您的问题,是的,我需要检索所有固定的帖子。而且,标记一个特定的帖子是我所说的“在“帖子”表中添加一个“固定”布尔列”的意思(我不确定我们在这里谈论的是不是同一件事??)
    猜你喜欢
    • 1970-01-01
    • 2013-03-26
    • 2014-12-31
    • 2010-10-15
    • 2019-02-22
    • 2014-02-22
    • 2018-09-11
    • 2012-01-27
    • 1970-01-01
    相关资源
    最近更新 更多