Ruby on rails 如何组织/存储“a”;“类型”;注释表的字段?

Ruby on rails 如何组织/存储“a”;“类型”;注释表的字段?,ruby-on-rails,database-design,Ruby On Rails,Database Design,我的应用程序有大约六种不同类型的项目,用户可以对其进行评论(文章、照片、视频、用户配置文件、博客帖子、论坛帖子) 我现在的计划是在我的数据库中有一个comments表,然后在表中有parent\u id和type字段 type字段将只是一个字符串,其内容将是其父表的名称。因此,例如,对于文章注释,类型应该是Article 这是处理注释表的最佳方法吗?或者还有其他更有效的方法吗?如果一条评论不能应用于多个事物(同一条评论不能同时应用于一篇文章和一篇博客文章,或者两篇不同的文章),那么为什么它是一个

我的应用程序有大约六种不同类型的项目,用户可以对其进行评论(文章、照片、视频、用户配置文件、博客帖子、论坛帖子)

我现在的计划是在我的数据库中有一个
comments
表,然后在表中有
parent\u id
type
字段

type
字段将只是一个
字符串
,其内容将是其父表的名称。因此,例如,对于文章注释,类型应该是
Article


这是处理
注释
表的最佳方法吗?或者还有其他更有效的方法吗?

如果一条评论不能应用于多个事物(同一条评论不能同时应用于一篇文章和一篇博客文章,或者两篇不同的文章),那么为什么它是一个基本实体

如果您愿意,我会有一个注释表,如下所示:

COMMENT_ID
COMMENT_BODY
USER_ID
DATE
ARTICLE_ID references ARTICLE on delete cascade
BLOG_POST_ID references BLOG_POST on delete cascade
... etc
然后有一个约束条件,说只有一个父母可以申请


另一种方法是为每个基本实体创建一个注释表,这样就可以创建文章注释、博客注释等等。

您所描述的是所谓的多态关联。Rails可以在开箱即用的情况下处理这些问题,请参见本集:

使用多态关联将是实现这一目标的最佳方式-查看Ryan关于该主题的文章(或Ascicast at)。我想你最终会得到这样的结果:

class Comment < ActiveRecord::Base

  belongs_to :commentable, :polymorphic => true
  belongs_to :user

end

我还发现在设置多态注释时很有用。希望有帮助

我建议看看像这样的插件,看看它们是如何实现的。或者直接使用插件。

我认为你的设计相当不错。它简单且易于实现。唯一的要求是行标识符的数据类型必须与comment.parent_id相同,以便联接保持一致。实际上,我会在comments表中为每个“类型”定义视图。例如,“创建照片注释作为从注释中选择*,其中类型=‘照片’”。然后,您可以从照片加入到照片上的照片注释。照片注释ID=照片注释。家长注释ID,依此类推


你也可以创建一个超类型,比如widget,你的照片、博客文章等都可以是widget的子类型。然后,您可以将注释表约束为对小部件表具有FK。“type”列可以移动到widget表中。

我会为每种类型的注释创建一个单独的注释表,这样我就可以轻松地应用外键。主要原因是它似乎是多余的。与相关联的模型实际上是相同的。@shpigford:相同的列类型不等于冗余。如果感觉是这样的话,克服这种感觉,它会引导你进行不必要的优化。如果一篇文章评论在功能(语义)上与博客评论不同,那么它应该有一个单独的表。代码查找表通常看起来也一样(名称、值对),但将所有代码(汽车类型、发动机类型、油漆类型)放入一个表中,然后使用额外的“where type=car type”条件从该表中选择汽车类型是没有意义的。
has_many :comments, :as => :commentable