2011-03-11 126 views
0

我在表中的一個有一列VARCHAR(70)其中,I存儲空間分隔標籤:SQL列搜索問題(SQL Server 2005中)

Id Tags 
1 Baby Kids Learning Alphabets 
2 Kids Baby 
3 Comedy Movie Fun 
100 Kids Learning Alphabets 
500 Kids Baby 

我執行搜索的列: 獲取所有的IDS我們可以在標籤中添加嬰兒兒童和字母

我可以在這裏做標籤,如'%Baby%'或標籤'%Kids%'或標籤'Like Alphabets%' 選擇查詢時,的行。但添加\刪除\編輯總是非常快。

所以我添加了名爲哪裏存儲標記字母像標籤另一個表:

Tag  Id 
    Alphabets 1 
    Alphabets 100 
    Baby  1 
    Baby  2 
    Baby  500 
    Comedy  3 
    Kids  1 

這使得搜索速度更快,購買更新\刪除\插入痛苦。

我的設計是否適合未來的發展?

您應該如何設計此標籤列?

感謝您閱讀

編輯: * 所有我想拉是相關的ID列表。基本上找到所有具有給定標籤或標籤的ID。就像這個問題一樣,你會在右邊看到「相關問題」。這就是我想要得到的。 *

回答

1

你真的必須分析你網站的哪些方面會增長,你的目標是什麼。會有大量的插頁嗎?會有大量的標籤嗎?您是否需要回答「有多少個問題有'Alphabet'標籤?」我討厭「取決於」答案,但它確實取決於你的目標和期望。

+0

我有所有的問題的答案。將會有數百萬個標籤。只要考慮它是一個公共分享網站。如果有1000萬行,每個有5個標籤,那麼就是50M標籤。所以噸標籤將在那裏。我必須選擇給我所有的ID,我們有字母和學習 – kheya 2011-03-11 00:56:46

+1

這聽起來像標籤可能會成爲你的瓶頸,所以他們應該快。出於這個原因,你最近的做法似乎更好。您還可以考慮在標籤表上保留一個緩存計數,以防需要回答「該標籤使用了多少次?」的問題。這當然是插入/更新/刪除的另一件事情,但如果您希望在每個頁面視圖上顯示標籤雲,從長遠來看可能會帶來巨大的收益。 – skaz 2011-03-11 01:03:03

1

這裏是我的建議:

創建2個新表。一個簡單的存儲然後,你可以簡單地與表之間的加入搜索標籤

Tag  Id 
    Alphabets 1 
    Baby  2 
    Comedy  3 
    Kids  4 
    Learning 5 
    Alphabets 6 

第二個將標籤在第一個表

main_id tag_id 
    1   2 
    1   4 
    1   5 
    1   6 
    100  4 
    100  5 
    100  6 

鏈接到的條目的名稱。它會更快。一定要包含適當的索引。

+0

在我的設計中,我看到零利益。我正在保存一個連接並輕鬆插入\ update \ delete。 – kheya 2011-03-11 01:00:29

+1

既然您問過未來的設計 - 這將是最好的方法。如果您稍後決定添加子類別並更改其中一個類別名稱,這會讓您的生活變得更簡單。以「寶貝」爲例。如果您將來決定製作不同類別的「幼兒」和「幼兒」,並且可能將所有當前的「嬰兒」變爲「幼兒」,則必須更新設計中的每一行,並在「嬰兒」 」。與我的,你只需要更新1條目的類別表,你就完成了。 – rayman86 2011-03-11 01:05:11

+0

這也是一個很好的設計,請參閱http://www.sqlteam.com/article/database-design-and-modeling-fundamentals(多對多搜索),並查看http://en.wikipedia.org/ wiki/Database_normalization或谷歌搜索數據庫規範化 – rayman86 2011-03-11 01:05:58