1

作成中の Web サイトにユーザーごとのタグ/インタレスト クラウド機能を実装しようとしています。

各ユーザーにはプロファイル ページがあり、そのページには事前に選択された興味のタグ クラウドが表示されます。各ユーザーは、そのようなタグが以前に使用されていた場合は提案を、存在しない場合は作成して、カンマ区切りで興味を入力できます。興味は、音楽のジャンル、趣味などです。

また、クラウドに応じて「互換性がある」ユーザーを見つけるために、ユーザーのタグ クラウド (共有タグ) を比較するなどの基本的な機能も追加したいと考えています。

これを達成するために、データベースのロジスティクスの助けを借りることができます。単純なデータベースの設計は理解していますが、上記の設計に頭を悩ませることはできません。

現時点では、データベースは 1 つのテーブルであり、ID/ユーザー名/パスワード/検証 (最後のキーは電子メール検証用のキー) を備えています。

タグ クラウド db について私が思いついた唯一のアイデアは 2 つのテーブルです。1 つは tagid と tagname フィールドを持つ tags と呼ばれ、もう 1 つは tagid と userid フィールドを持つ users_tags で、ユーザーが持つすべてのタグのエントリです。ただし、これがベストプラクティスであるかどうかはわかりません。

誰かがこのすべてについて私に何らかの方向性を教えてくれることを願っています-事前に感謝します.

4

1 に答える 1

0

userid と tagid のみを持つテーブルを持つことは、これに最適なルートのように思えます。

あなたが言及したように「互換性のある」ユーザーを見つけるには、次のようなクエリを実行するだけです

SELECT 
   ut.userid, COUNT(*) ct 
FROM 
   user_tags ut 
WHERE 
   ut.tagid IN (SELECT uta.tagid FROM user_tags uta WHERE uta.userid=24 ) 
GROUP BY ut.userid ORDER BY ct DESC;

上記のクエリでも元のユーザーが返されますが、クエリから元のユーザーを削除するよりもはるかに効率的であることに注意してください。

于 2013-02-20T12:48:16.233 に答える