2012-07-31 42 views
0

將SQL Server數據庫中的值存儲爲逗號分隔值是否存在任何問題?將SQL Server數據庫中的值存儲爲逗號分隔值是否存在任何問題?

我有100個類別,每個類別我有500個產品。我最初的想法是保存在一個逗號分隔值的產品代碼,以便只有100個記錄將表進來:

catagcd1 - prod1,prod2,prod3...... 
    catagcd2 - prod2,prod3,prod5...... 

但是,當我問我的朋友:不保存它作爲一個逗號分隔,存儲作爲正常的結構。這意味着:

catagcd1 - prod1 
    catagcd1 - prod2 
    catagcd1 - prod3 
    catagcd2 - prod2 
    ---------------- 
    ---------------- 

我的方式和他的區別是什麼?從性能角度來看還有什麼不同?你能解釋一下嗎?

+1

請訪問http:// stackoverflow.com/questions/6631851/many-database-rows-vs-one-comma-separated-values-row或http://stackoverflow.com/questions/738133/comma-separated-values-in-a-database-字段例如... – eis 2012-07-31 05:55:50

+3

逗號分隔的值甚至違反了**第一範式**,並且通常是一個糟糕的主意。 SQL Server **沒有任何問題** 500行 - 哎呀,甚至沒有500'000行!但試圖將這些逗號分隔的值解析爲單獨的值是一團糟,需要很多(不必要的)代碼。建議:**只是不要做!**行數的「節省」是完全不相關的,並且根本沒有幫助 - 設計和查詢中的混亂**是非常相關的**並且會導致你將來會有很多悲傷。 – 2012-07-31 06:02:45

+0

爲什麼要存儲這100條記錄?爲什麼不將100條記錄存儲爲逗號分隔的列表,然後您將擁有一條記錄!如果100比50000好,那麼1必須更好。 – 2012-07-31 07:26:12

回答

2

你的朋友所指的可能是database normalisation,因此您可能已categoryproduct,或許多之間的1對多的關係:很多(categoryproductcategoryproduct)如果一個產品在多個類別出現。

以逗號分隔值存儲數據的問題在於,您需要在每次需要使用產品時都解碼產品字符串,這可能會很慢且很麻煩。

作爲替代方案,如果你不需要直接引用的產品,你也可以存儲在XML列的產品/類別層次結構(類似於接近到文檔或數據庫的多值問題)

相關問題