1

我想对我是否过度建模我的应用程序提出一些意见。在这个应用程序中,我保存了从网站下载的 html 元数据。我下载元标记并使它们成为数组的一部分。对于 meta_tags 数组中的每个元素,我想保存该元素。但是我需要考虑一些情况,例如,有两个机器人元数据(一个用于索引,一个用于跟随)。所以我最初的想法是通过创建一个“meta_tags”表并将任何元标记保存到他们的表来解决这个问题。这将使网站表保持精简。我只想指定站点表有很多元标签。

但后来我意识到 meta_tags 会有很多重复的条目。例如,如果我有两个网站有两个机器人元标记(同样,一个用于索引,一个用于关注),那么当我只有两条唯一记录时,该表上有四行。所以现在我在想我应该让站点模型下载 html,然后有一个单独的模型,称为“元标记”,列出所有唯一的元标记。然后我会通过一个名为“site_meta_tags”的连接表将sites 表与meta_tags 表关联起来,该表标识哪个站点具有哪些元标记。这是最好的设置方法吗?还是我让这太复杂了?

更新:我在这里发布了一个后续问题:Rails 应用程序在模型间保存时遇到问题

4

1 回答 1

1

模型和关联的“正确”数量取决于您的用例和约束。如果数据库空间非常宝贵,那么数据库规范化可能更有意义。如果您想要更快的查找,非规范化可能更有意义。如果您需要优化某些类型的查找,请为此安排您的模型和关系。综上所述,如果你只是在做原型,现在不要太担心——从有意义的事情开始,看看会发生什么。

如果您希望能够在两个方向上查找,您描述的方式(多对多关系)对我来说听起来不错:

  1. 先找一个元标签,然后找到相关的网站
  2. 首先为一个网站,然后找到相关联的元标记

(注意:不要忘记添加索引。)

顺便说一句,在 Rails 中,对于多对多连接表,Rails 约定是在将两个表名称按字母顺序排列之前将它们粘在一起。所以默认情况下它将是“meta_tags_sites”而不是“sites_meta_tags”。请参阅A Guide to Active Record Associations中的“has_and_belongs_to_many”部分。

于 2012-06-22T13:31:41.350 回答