1

写真やビデオ、イベントを共有するための小さなソーシャル ネットワークを作成します。

photos テーブルの属性は次のとおりです。title, description, name

ビデオ テーブルの属性は次のとおりです。title , description , name, runtime

イベント テーブルの属性は次のとおりです。title, description, date_begining, date_end

ご覧のとおり、ツリー テーブル間に重複がありますが、これはまったく重要ではありません。

したがって、各モデル (写真、ビデオ、イベント) にはコメントを追加する機能が必要です。私はPostgresqlを使用しています。これを行う簡単な方法は、ポリモーフィック アソシエーションを使用することですが、 hstoreを使用してそれらすべてを処理することもできると思います (写真、ビデオ、イベント) は、共通の属性を含む単一のモデル (共有など) のように、共有テーブルにプロパティ列を追加します。

Shares ( title:string, description:string, name:string, properties:hstore)

それで、ポリモーフィックな関連付けは必要ないと思います。次のようなモデルとの間Shareに単純な関係を追加できます。Comment

class Share < ActiveRecord::Base
     has_many :comments
end

class Comment < ActiveRecord::Base
     belongs_to :share
end

ここでの私の質問は、これを行うための最良の方法は何ですか (高速 + パフォーマンス) ? また、Hstore を使用している場合、別のデータベース管理システムに変更または移行すると、将来問題が見つかる可能性がありますか?

4

2 に答える 2

0

Hstore は、属性に優れた柔軟性を提供するために、ハッシュのようなデータに適しています。

固定属性 (body、title、user、commentable のみ) を持つコメントの単純なユースケースでは、必要ないと思います。

関連付けの設定は次のように簡単です

class Photo < ActiveRecord::Base
   has_many comments, as: :commentable
end

class Video < ActiveRecord::Base
   has_many comments, as: :commentable
end

class Comment < ActiveRecord::Base
   belongs_to :commentable, polymorphic: true
end
于 2013-08-23T15:31:57.270 に答える
0

https://github.com/jackdempsey/acts_as_commentableのようなものを使用します。

hstore 内でクエリを実行できるかどうかはわかりませんが、一般的にCommentは ActiveRecord モデルとして保持する方が便利かもしれません。(関連付け、クエリ、および HStore を使用するのではなく、取得するその他すべての Activerecord について考えてください。)

于 2013-08-23T15:21:14.497 に答える