casperOne的顯示方式,但我會親自加還多了一個表的屬性值,與
Widgets
-WidgetID (pk)
-Name
WidgetAttributes
-AttributeID (pk)
-Name
WidgetHasAttribute
-WidgetID (pk)
-AttributeID (pk)
WidgetAttributeValues
-ValueID (pk)
-WidgetID
-AttributeID
-Value
結束了爲了檢索的結果,你想加入的表和執行總串聯,這樣你就可以用數據最終看起來像(例如):
Name Properties
Widget1 Attr1:Value1;Attr2:Value2;...etc
然後,你可以在你的業務邏輯層拆分屬性字符串,並根據需要使用。
如何加入數據反映:
SELECT w.Name, wa.Name + ':' + wav.Value
FROM ((
Widgets w
INNER JOIN
WidgetHasAttribute wha
ON w.WidgetID = wha.WidgetID)
INNER JOIN WidgetAttributes wa
ON wha.AttributeID = wa.AttributeID)
INNER JOIN WidgetAttributeValues wav
ON (w.WidgetID = wav.WidgetID AND wa.AttributeID = wav.AttributeID)
你可以閱讀更多的總級聯here。
就性能而言,它不應該是一個問題,只要你一定要索引的所有列,這將是頻繁讀取 - 這是
- 所有的ID列,因爲他們將在加盟條款
- WidgetAttributes.Name和WidgetAttributeValues.Value,因爲他們將串聯
進行比較會在此情況下,會導致性能問題大量的小部件? 如果要顯示1000個小部件,那麼對於每個小部件,我們都必須單獨查詢它們的屬性。 我不是數據庫專家,所以不知道這是否會在一次SQL查詢中顯着減慢速度? – 2009-02-05 01:10:23