3

オブジェクトのタグ付けのためのデータベース スキーマの構築に関する多くの投稿を見てきました ( dlamblin の投稿Artilheiro の投稿など)。

私が何日にもわたる調査の中で見つけられないように見えるのは、タグをユーザーに割り当てることを可能にするタグ付けスキーマを実装する際のスキーマロジックです (LinkedIn のSkills and Expertiseシステムなど、ユーザーによってタグが追加された場合)索引付けして検索できます)。これは、問題の「オブジェクト」をユーザーに変更するのと同じくらい簡単かもしれませんが、それよりも複雑だと感じています。

カテゴリを除いて、これとほぼ同じものを構築できるようにしたいと考えています。たとえば、LinkedIn のスキルをいくつか取り上げて分類すると、IT/コンピューティング、小売、プロジェクト管理などのようになります。

Nested Setデータを分類するための一般的な方法論とアーキテクチャがいくつかあることは知っていますAdjacency List。「ネストされたセットの挿入と削除はリソースを大量に消費する」、「隣接リスト モデルはぎこちなく、有限であり、無制限の深さをカバーしていない」など、両方について多くのことを聞いています。

したがって、2 つの質問が 1 つの投稿にまとめられています。

  • ユーザーへのスキルのタグ付け、スキルのインデックス作成と検索、または特定のタグのユーザーのプールの構築などに関して、大まかなスキーマの例はどのようになりますか?

  • 分類する必要性に照らして、この性質のものを分類する最善の方法は何ですか?

  • 私が気づいていない、これにより適した他のモデルはありますか? (おっと、それは 3 つの質問だと思います)

4

3 に答える 3

1

最良のロジックは、リンクした投稿の状態と同じだと思います

+------- +
| user   |
+------- +
| userid |
| ...    |
+--------+

+-------- --+
| linktable |
+-----------+
| userid    | <- (fk and pk)
| tagid     | <- (fk and pk)
+-----------+

+-------+
| tag   |
+-------+
| tagid |
| ...   |
+-------+

かなりの方法でimoに行きます。タグを分類したい場合は、いつでもカテゴリ テーブルをタグ テーブルに添付できます。

于 2013-04-26T15:37:02.697 に答える
1

あなたはどのデータベースか言いませんでしたので、悪魔の弁護者を演じて、それが MongoDB でどのように機能するかを提案します。次のようにユーザーを作成します。

db.users.insert({
  name: "bob",
  skills: [ "surfing", "knitting", "eating"]
})

次に、「スキル」に関するインデックスを作成します。Mongo は配列内の各スキルをインデックスに追加し、すばやく検索できるようにします。2 つのスキルが交差するユーザーを検索すると、SQL データベースと同様のパフォーマンスが得られますが、構文ははるかに優れています。

db.users.find({skills: "$in": ["surfing", "knitting"]})

利点は、1 回のディスク シークで、ユーザーに関して必要なすべての情報を取得できることです。欠点は、より多くのディスク容量と、多少多くの RAM を必要とすることです。しかし、結合によって引き起こされるディスク シークを回避できれば、勝利となる可能性があります。

于 2013-05-03T14:28:08.127 に答える