2011-01-14 9 views
4

tag1、tag2、tag3などの形でタグを送信していますが、パフォーマンスとプロフェッショナリズムの点でデータベースレイアウトを作成する方法がわかりません。TAGデータベースを作成する

誰かがタグをクリックすると、そのタグを持つすべてのページをクエリしてプルアップします。

+2

が重複する可能性(http://stackoverflow.com/questions/20856/how-do-you-recommend-implementing-tags-or-tagging) – Gordon

答えて

1

これはその後持つ、あなたが望むすべての場合:tag_idtagフィールド、タグに関連するかもしれないいくつかの他の分野、すなわちの説明、権限、...

  • page_tagsタグと

    1. tagsテーブルをtag_idpage_idのフィールドを使用して、タグとページの間に多対多の関係を保持します(pagesテーブルがインデックスカラムとしてpage_idであると仮定します)。タグを追加した日時や追加した人など、追加のフィールドも考慮する)

    しかし、後でタグクラウドのようなものを追加したい場合がありますキャッシュすることができます(たとえば、誰かが何かをタグ付けするたびにタグを再構築したいのではなく、定期的に、たとえば1日に1回)。これを実現するには、別のテーブルtags_cloudtag_idcountフィールドに追加します。

  • 7

    タグ自体がタグテーブルに入ります。この表は、唯一あなたがページテーブルに

    PAGES_TAGS 
    tag_id | page_id 
    1   13 
    1   24 
    1   11 
    2   12 
    

    をタグテーブルに一致するようにルックアップテーブルを作成するユニークなタグ

    TAGS 
    id | tagname 
    1  stack 
    2  overflow 
    

    を持っているあなたは、その後、どのタグがどのページを照会するために参加します。 [どのようにあなたがタグやタグ付けを導入することはお勧めしない]の

    SELECT * 
        FROM pages p 
    INNER JOIN pages_tags pt ON p.id = pt.page_id 
    INNER JOIN tags t  ON t.id = pt.tag_id 
    WHERE tag.name='overflow' 
    
    関連する問題