【问题标题】:normalize and efficient SQL Database desinging规范高效的 SQL 数据库设计
【发布时间】:2015-12-13 16:25:49
【问题描述】:

我有多个用户/客户(假设 N 个用户) 和 M 篇文章。

bydeafult 这 M 篇文章将显示给每个用户。用户可以将文章标记为“不感兴趣”。如果他这样做,我们将不会向他/她展示这篇文章。但是这篇文章可能对其他没有标记为“不感兴趣”的用户可见。对吧?

现在我在这里遇到了问题。我不想为不同的用户创建重复的文章对象。相反,应该有一些方式/标志(not_interested)与每个用户相关联,以便我们可以根据它进行过滤。但我不确定如何在 SQL 数据库中执行此操作。

任何建议将不胜感激。

表格:

Article:
      title, description, etc..

User:
    username, email, phone, etc

我是否应该创建一个中间表,其中包含文章和用户的外键以及 not_interested 的标志?有没有更好的办法?

【问题讨论】:

    标签: mysql database postgresql database-design relational-database


    【解决方案1】:

    你需要一个多对多表,比如

    user_article:
      article_id, user_id, not_interested
    

    【讨论】:

    • 或将表命名为user_not_interested_in_article 并跳过not_interested 列:-)
    • 并使用LEFT JOIN ... IS NULL 查找不感兴趣的行。
    最近更新 更多