0

自分のサイトのユーザーが自分のサイトの他のユーザーやトピックをフォローできるようにしたいのですが、両方を組み合わせる方法がわかりません。クォーラを使用して、ユーザー、トピック、質問、編集などをフォローする方法を考えてください。

ユーザーをフォローするために、私はそれを非常にシンプルに保つつもりでした:

user_id: int
followers_id: int

しかし、これはユーザーにのみ有効なので、次の方法について考えました。

user_id: int
date: Date
following: int(could be topic_id or user_id)
following_type: text(topic or user)

トピックまたはユーザーテーブルのいずれかをクエリするために型を解析する必要があるため、これがこれを行うための最良の方法であるかどうかは少しわかりません(ただし、すべてのデータが1つのテーブルにあるため、すべてをすばやく取得できるという利点があります1つのクエリで次の情報)。

これが最善の方法ですか、それともこれを達成するためのより良い(より効率的でスケーラブルななど)方法がありますか?各フォロワータイプを異なるテーブルに分割する必要がありますか?どんなデザインを考えたらいいのかよくわかりません。

4

2 に答える 2

2

明らかな可能性は、リンクテーブルを増やすことです-接続できるアイテムの種類の組み合わせごとに1つ。

ただし、継承1を使用してこの急増を回避する方が、おそらく管理しやすくなります。

ここに画像の説明を入力してください

(さまざまなフォロワー間の関係は示されていません。)

このように、フォロー可能なアイテムの種類(ユーザー、トピック、質問、編集など)がいくつあっても、FOLLOWERテーブルはそれらすべてをカバーします。

リレーショナルデータベースで継承を表すには、一般に3つの戦略があります。詳細については、ERwinメソッドガイドの「サブタイプの関係」を参照してください。


1別名カテゴリ、サブタイプ、サブクラス、一般化階層など。

于 2012-07-23T18:11:08.943 に答える
0

この問題を処理する方法はいくつかあります。リレーショナルDBを使い続けたい場合は、すべての「フォロー」を追跡する結合テーブル(または複数)を作成します。

MongoDBやRedisなどの非リレーショナルデータベースを調べる時間があれば、必要なものを正確に追跡することができます。これらのサービスを使用すると、さまざまなパラメーターを使用してカスタムデータ型を構造化できます。このスタイルのDBについて読む価値があるかもしれません。

于 2012-07-23T17:39:49.633 に答える