0

私はpostgres dbを使用してRailsアプリケーションに取り組んでいます。スキーマがあるmerchant_review_votesというテーブルがあります

--------------------------------------------------
 ID | 整数
 ユーザー ID | 整数
 マーチャント_レビュー_id | 整数
 値 | 整数
 created_at | タイムゾーンなしのタイムスタンプ
 updated_at | タイムゾーンなしのタイムスタンプ
--------------------------------------------------

投票を含む別のセクション (製品など) を作成しています。これと同様の別のスキーマを作成するか、コードを変更して 1 つのテーブルのみを使用することをお勧めします。テーブルが 1 つだけの場合、スキーマはどのように表示されますか? 私はどのような問題に直面することができます..

4

3 に答える 3

1

両方のレビューにまったく同じ情報が含まれている場合は、「review_type」列を持つ単一のテーブルを使用します。ストア レビューの場合、その列には「ストア」が含まれ、商品レビューの列には「製品」が含まれます。

しかし、テーブル定義で確認されたストアへの参照がありません。それが必要な場合 (そうしないと、レビューがどのストアまたは製品に属しているかわからない可能性が非常に高くなります)、おそらく 2 つのテーブルを使用する方が適切です。store テーブルへの外部キーを持つもの、product テーブルへの外部キーを持つもの。

于 2012-06-18T10:34:13.087 に答える
0

これはPolymorphic Associationの良い例のように思えます。

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_idID が保持されます。移行では、次を使用してこれらの列を作成できます。

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

これはおそらく、一般的に SO にはあまりにも制限がありませんが、これが私の見解です: それは依存します!

時々それは理にかなっています。私は、たとえば、グローバル ノート テーブルのファンではありません。

一般に、これは避ける価値があると思いますが、必要な場合は、両方のテーブルがレコードのない共通のベースを継承することで、管理が大幅に簡素化されます。

于 2012-09-26T05:00:47.873 に答える