2009-08-25 2 views
9

私は既存のwebappを持っており、ユーザーが既存のオブジェクトにタグを付けることができるようにタグ機能を追加したいと考えています。問題は、私は各オブジェクトにタグ列を追加する必要がありますか?または私はそれを正規化し、各オブジェクトがタグのコレクションを持つタグテーブルを使用する必要がありますか?タグクラウドを作成しやすくするために、よりクリーンで、より簡単にレポートを作成しやすくするために、私は後者に傾いています。しかし、私はこれが1000回解決されたことを知っているので、私は何かを見逃しているかどうか尋ねたいと思っていました。データベースのタグをモデル化するには?

答えて

6

オブジェクトに複数のタグを関​​連付ける必要があるユーザーを予測していますか?

でない場合は、OBJECTテーブルにTAG_ID fkを追加します。そうしないと、正しく多対多の関係をモデル化するために、合計で3つのテーブルを必要とするだろう:

OBJECT

  • OBJECT_ID(PK)

OBJECT_TAG_XREF

  • OBJECT_ID (pk、fk to OBJECT)
  • TAG_ID(pk、fk to TAG)

タグ

  • TAG_ID(PK)
+0

どのようにこの変更は、ユーザーにタグを結びつけることでしょうか? OBJECT_IDはUSER_IDになりますか? –

+1

@ JuniperAsh: 'OBJECT_TAG_XREF'に' user_id'カラムを追加する必要があります。他の2つのカラムと同じように、プライマリキーとユーザテーブルの外部キーです。 –

+0

もっと意味をなさない!ありがとうございました! –

4

はい、正規化する必要があります。 'タグ列'は、レコードごとに1つのタグのみをサポートするか、または厄介な検索パフォーマンスを持つことになります。

2

間違いなく正規化してください。タグのテーブル、既存のオブジェクトのテーブル、およびそれらの間のリンクテーブル。

関連する問題