0

我正在使用 postgres db 开发 Rails 应用程序。我有一个名为 Mercer_review_votes 的表,其中架构是

--------------------------------------------------
 编号 | 整数
 用户 ID | 整数
 商家评论 ID | 整数
 价值 | 整数
 created_at | 没有时区的时间戳
 更新时间 | 没有时区的时间戳
--------------------------------------------------

我正在创建另一个涉及投票的部分(比如产品),创建另一个类似于此的模式或修改代码并仅使用一个表是个好主意。如果只有一张表,架构的外观如何?我可以面对什么样的问题..

4

3 回答 3

1

如果两个评论都包含完全相同的信息,那么我会选择一个包含“review_type”列的表。对于商店评论,该列将包含“商店”,而对于产品评论,该列将包含“产品”。

但是我缺少对在您的表定义中查看的存储的引用。如果您需要它(这很有可能,否则您将不知道评论属于哪个商店或产品),您可能最好有两个表。一个带有指向 store 表的外键,一个带有指向 product 表的外键。

于 2012-06-18T10:34:13.087 回答
0

这听起来像是一个多态关联的好案例。

class Review < ActiveRecord::Base
  belongs_to :user
  belongs_to :reviewable, :polymorphic => true
end

class Merchant < ActiveRecord::Base
  has_many :reviews, :as => :reviewable
end

class Product < ActiveRecord::Base
  has_many :reviews, :as => :reviewable
end

然后,您可以分别致电@merchant.reviews@product.reviews获取商家和产品的评论。您可以调用@review.reviewable以获取已审核的对象。

多态关联基于如下表结构:

--------------------------------------------------
  id                  | integer 
  user_id             | integer 
  reviewable_id       | integer
  reviewable_type     | string
  value               | integer
  created_at          | timestamp without time zone
  updated_at          | timestamp without time zone
--------------------------------------------------

reviewable_type列包含“可审查”对象的类名和reviewable_id它的 id。在迁移中,您可以使用以下方法创建这些列:

 t.references :reviewable, :polymorphic => true
于 2012-06-18T11:56:18.150 回答
0

这对于 SO 来说可能过于开放,但我的看法是:这取决于!

有时它是有道理的。我不喜欢全局笔记表。

一般来说,我认为避免这种情况是值得的,但是当你不得不这样做时,让两个表都继承一个没有记录的共同基础可以极大地简化管理。

于 2012-09-26T05:00:47.873 回答