网络抓取Rails App过度建模?

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

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

更新:我在这里发布了一个跟进问题: Rails应用程序在模型间保存方面存在问题

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

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

  1. 首先获取元标记,然后找到关联的网站
  2. 首先是站点,然后找到关联的元标记

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

顺便说一句,在Rails中,对于多对多的连接表,Rails约定是在将两个表名称粘在一起之前按字母顺序排列。 所以默认情况下它是“meta_tags_sites”而不是“sites_meta_tags”。 请参阅“ 活动记录关联指南 ”中的“has_and_belongs_to_many”部分。