0

「手動推薦システム」のようなものを持っているシステムを作成しています。これは次のように機能します。ユーザーがシステム内の何かが興味深いと思った場合、そのコンテンツを「推奨」できます。このコンテンツは、すべてのユーザーのフォロワーに推奨されます (フォロワーは「ウォール」に表示されます)。(誰が訪問したか、または自動化の種類は気にしません。私にとって重要なのは、ユーザーがボタンをクリックしてコメントを共有できることだけです)。

私がフォローしているユーザーがブログ投稿を推奨するとしましょう。この投稿へのリンクが私の「ウォール」に表示されます。このリンクには、投稿のタイトル、説明などが含まれています。彼はまた、ビデオ、写真、ユーザー プロファイルなどを推奨することもできます。

推奨されるコンテンツの種類ごとに、異なるレイアウトがあり、異なる情報が表示されます。ここに問題があります。

アプローチの作成に問題があるので、この問題を解決してください: 推奨されたものを追跡し、情報を最新の状態に保ち (投稿のタイトルが変更された場合は、推奨事項で変更する必要があります)、ソリューションをクリーンに保つにはどうすればよいですか?

これらは私が行ったアプローチであり、私がそれらを好きではない理由です:

  • Recommendation という「一般的な」テーブルを作成します。これには、推奨タイトル、recommendInfo_1、recommendInfo_2、recommendInfo_3、...、recommendInfo_N が含まれます。これは、取得が簡単で、すべてのレコメンデーション タイプが同じ列を使用できるため、優れたアプローチです。情報が更新されないため (これを行うのはやや複雑で、オブジェクトが更新されるたびに可能な推奨事項を確認する必要があります)、見栄えが悪いため、私はそれが好きではありませんでした。

  • レコメンデーション テーブルと「値のペア テーブル」を作成します。推奨テーブルにはすべての推奨タイプに共通のフィールドがあり、キー値テーブルには各推奨タイプに固有の情報があります。更新されたフィールドを維持するのと同じ問題があり、この 2 番目のテーブルは面倒に見え、クエリを実行してすべての種類のレコメンデーションを一度に取得するのは簡単ではないため、私はそれが好きではありませんでした。

  • レコメンデーション ID、レコメンデーション タイプ、およびコンテンツ ID のみを含むレコメンデーション テーブルを作成します。表がきれいになったのもプラスポイントで、情報更新の問題も解消されます。ここでの問題は次のとおりです。取得クエリが非常に複雑になるのではないかと心配しています。N 個の「外部結合」を実行する必要があります。コンテンツ タイプの数は N であり、select 句はさまざまな種類のために非常に速く成長する可能性があります。さまざまなコンテンツ タイプからの情報。

私に役立つアイデア/記事/デザインパターンはありますか?

ps: これが重要かどうかはわかりませんが、asp.net と msssql を使用しています。

4

1 に答える 1

1

ユーザーが写真、ビデオ、車、バナナなどを推薦できるようにします。これらすべてをリストしたテーブルを作成します。したがって、ユーザーが推奨する可能性のあるすべてのアイテムは、ThingまたはObjectテーブルにあり、それがどのようなもので、追加情報がどこにあるかに関する情報が含まれています。

ユーザーが物を推薦すると、ユーザーと物の間に関係を作成するだけです。したがって、Recommendationテーブルには、userId、thingId、およびそのアイテムが推奨された時期を示すタイムスタンプが含まれます。

あなたのプログラムでは、サブクラス Photo、Video、Car、Banana を持つスーパークラス Thing を作成します。たぶん、あなたのすべてのものは何らかのインターフェースを実装しているので、それがthing.getName()どんな種類のものであっても呼び出すことができます.

于 2012-11-15T11:58:37.077 に答える