2012-02-18 8 views
0

hereと同じデータモデルがあるとします。 3つの列を持つDBスキーマのタグ同義語

Table: Item 
Columns: ItemID, Title, Content 

Table: Tag 
Columns: TagID, Title 

Table: ItemTag 
Columns: ItemID, TagID 

あなたがstackoverflow上にあるのと同様に、タグの同義語を持つようにしたい場合は

、どこにデータ・モデルにこの情報を置くでしょうか?コンマで区切られた類義語のリストを持つ属性を1つだけ追加するか、データモデルを少し変換しますか?

SQL新しいアイテムを挿入するためのステートメントはどのように見えますか?新しい項目はすべてのシノニムまたは1つのメインタグのみで結ばれますか?これはシノニムであることをコード内で検出する必要がありますか?あなたはスムーズにを挿入するための推薦アプローチ

は、タグ操作で検索とを削除しますか?

答えて

1

変更TagテーブルとTagSynonymテーブルを追加します。

Table: Tag 
Columns: TagID 

Table: TagSynonym 
Columns: TagID, Title 

TagSynonym.TagIDTag(TagID)にFKだろうとTitleがPKだろう。あなたも "MainSynonym" タグを持つようにしたい場合は


、その後、あなたはこれを使用することができます

Table: Tag 
Columns: TagID 

Table: TagSynonym 
Columns: TagID, Title 

Table: TagMainSynonym 
Columns: TagID, Title 

TagSynonym(TagID, Title)にFKであるPKいるとTagMainSynonym(TagID, Title)TagMainSynonym(TagID)と。

それは延滞に見えるかもしれないが、私は使用して検討した

+0

(3つの表に)残りを行いますTag.TagIDとカスケード効果にのみ、単純なUPDATE(1行)が必要になります二つのタグをマージするような簡単な操作1つはメイン同義語の名前を含む「同義語」列のタグ、またはそれが主要な同義語そのものの場合は「メイン」のタグです。 2つのテーブルを持つ方が良いですか? – xralf

+0

'ItemTag.TagID'は、'(TagID) 'が主キーである' SomeTable(TagID) 'に対する外部キーでなければなりません。しかし、あなたが(今)すべての同義語を特定することを希望する 'TagID'では、正しいのでしょうか?だから、私は別のテーブルを追加せずに方法を表示しません。 –

+0

さて、私は参照してください。 2つのテーブルを使用すると、タグの挿入、削除、および検索の実装がより純粋になります。 – xralf

関連する問題