2011-02-09 78 views
1

數據庫中的多個對象需要用字符串標記(完全是任意的)來標記。一個解決方案是一個典型的多對多一對多關係表示:標記數據庫對象(字符串標記)和標記查找


table Customer  CustomerId, CustomerName 
table Product  ProductId, ProductName 
table Tags   TagId, TagName 
table CustomerTags CustomerId, TagId 
table ProductTags ProductId, TagId 

另一種解決方案是具有代表通過PATH secondary XML index標籤,以提高連續查詢XML列:


table Customer  CustomerId, CustomerName, Tags 
table Product  ProductId, ProductName, Tags 

哪裏的標籤是這將有標籤,如<標籤> <標籤名稱=「標籤1」/> < XML列/標籤>和路徑索引喜歡/標記/標籤

第一種解決方案提供了更快的查找,但添加了更多表格。第二種解決方案更慢但更乾淨。

我是新來的SQL,可能忽略了一些東西,所以任何輸入將不勝感激。

回答

2

我的投票將在第一個解決方案。

首先,在SQL Server 2008上處理XML比等效的直接tbl-bridge-tag設置要慢。如果您想查找所有標記爲X的產品,傳統SQL查詢將從tag-> product_tag-> product開始。您可以創建XML indexes(如您所提及的),但這些比XML本身更龐大,並且每個標記至少需要兩個索引(一個用於主要,另一個用於VALUE - 您需要VALUE輔助索引而不是PATH二級索引)。其次,如果您重命名/放棄標籤,則必須通過每個相關對象(產品/客戶)的XML結構並使用xml.modify(它具有非常有限的支持 - 例如,只有一個節點可以是一次修改)。

+0

標記刪除的好處...非常好,謝謝! – kateroh 2011-02-09 22:29:18