【问题标题】:Need suggestion on DB architecture需要关于数据库架构的建议
【发布时间】:2014-08-29 12:05:40
【问题描述】:

我正在做一个项目,我有以下用例。

用户可以为他们设置许多标语,我们在数据库中有很多预定义的数据,当他们开始输入标语时我们使用这些数据来显示自动建议,我使用的是 Rails。

User has_and_belongs_to_many taglines

Tagline has_and_belongs_to_many users

我有单独的联合表,一切都很好,但现在我需要将用户的自定义标语存储到 DB,这将只属于特定用户。

我是否应该克隆标语表并向其中添加用户 ID 或者如果我们有多个模型具有与标语相同的用例,那么处理这类场景的最佳架构是什么。

【问题讨论】:

  • 我可能会在taglines 表中添加一个custom 列,并用它来过滤标签以获取建议。
  • @BroiSatse 但是标语表目前是多对多的,但是自定义用户标语是belongs_to only user,为什么我们需要混合两者。?
  • 如果您创建第二个表,您需要记住每次更改模型时更新两个表/模型。您也无法一次性提取所有用户标签。 many-to-many 能够保持one-to-many 关联。只需添加一个验证来检查给定标签是否只能属于一个用户(如果它是自定义的)。

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


【解决方案1】:

您现有的 usertagline 表具有多对多关系,请保持这种关系。而 user 表和新的 customTagline 具有一对多的关系,那么为什么不创建一个新表来表示它呢?由于您提到 customTagline 仅属于特定用户。

【讨论】:

  • 这是非常直接的方式,如果我只有标语你的建议很好,但我有大约 6 个模型属于相同的场景,这里我需要创建 6 个具有相同结构的新模型,是否可取?
  • 如果您不确定,这意味着您没有足够的数据来做出决定。这意味着考虑到当前情况,任何选项都是好的,因此只需创建表和代码即可。当您滚动代码时,您将更深入地了解需求,这就是您将回来重构/规范化/非规范化表的时间。我就是这样做的。 @Senthil
【解决方案2】:

@BroiSatse 评论有道理,我也跟着。

如果您创建第二个表,则需要记住更新两个表 每次你想改变你的模型时,表格/模型。你不会;t 也不能一口气拉出所有用户标签。多对多是 能够进行一对多的关联。只需添加验证即可检查 如果给定标签是自定义的,则该标签只能属于一个用户。

【讨论】:

    猜你喜欢
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    • 2014-11-01
    相关资源
    最近更新 更多