2009-03-12 5 views
8

私はSO、Wordpressなどのようなサイトを持っています。タグのデータベーススキーマ(例:各Postにいくつかのオプションタグがあります)

これを処理する共通のデータベーススキーマは何ですか?私はそれがたくさんあると仮定しています< - >多くの構造、3つのテーブル。

誰もが考えている?

+0

SOがこれをどのように実装しているかはどうして重要ですか。より具体的ではない新しい質問を開くほうがいいですか(もしあなたがSOをどのように実装しているのか疑問に思っているなら、Jeffに電子メールを送ってください) –

+0

真実です。それは主に例として、何よりも大きかった。 –

答えて

9

3つのテーブルを多対多の構造にする必要があります。

例: Posts, PostsToTags(post_id,tag_id), Tags

キーが索引付けされています。 (あなたをPOST_NAME与える可能性がある、タグ名)読み取りパフォーマンスが重要で超である場合PostsToTagsテーブルはまた、両方の方法(post_id,tag_idtag_id,post_id)がインデックス化されますが、インデックス付きビューを導入する可能性を確認してください

あなたはもちろんの投稿とタグのインデックスが必要になります同じように。

+0

私は正しい軌道に乗っていたのだろうかと思っていた。 –

0

これがSOのものであるかどうかは完全にはわかりません。しかし、良い議論がありますhere

1

"私はそれが多くの構造であり、3つのテーブルを持つ多くの構造だと仮定しています。誰でもアイデアはありますか?"

さらに、重要な選択肢はありませんか?多対多の関係にある2つのリレーショナル表には、少なくとも1つの関連表がすべての外部キーの組合せを保持する必要があります。

これはなんですか?知るか。彼らのデータモデルには参照カウントが含まれています - すべての既知のタイムスタンプと元の作成者とタグについての多くの他のジャンクです。

最小限には3つのテーブルが必要です。

彼らがSOで行うことは知りにくいです。

0

wordpressが投稿用のタグをどのように扱うのかよく知っておくとよいでしょう。

+0

ワードプレスは、私が信じている3つのテーブルで多くのことをします。 –

-1

もう1つの可能性は、テーブルが2つしかないことです。

最大で5つのタグがあるとすると、タグテーブルに対する5つのヌル可能な外部キー参照を含む質問テーブルが可能である。

あまり正規化されていませんが、より効果的です。

+0

これはより効果的ではありません。複数のタグを探しているときに、恐ろしく複雑なクエリが導入されます。 –

+0

タグが区切られた1つのvarcharフィールドに格納されていて、そのフィールドに対して "%tag% '"のようなクエリを使用すると、おそらくあまりインデックスできないでしょうか? – benPearce

+0

@ sambo99 - 特定のタグの質問を見つけることは吸うだろう。 – Damovisa