我正在尋找一些建議,以瞭解產品數據庫的設計以及從中存儲/檢索數據的最佳方法。我打的塊是關於如何最好地表示產品可能具有的各種(有效)選項。產品數據庫結構:如何存儲每種產品的選項列表?
的基本結構是(不是實際的表定義):
PRODUCT_TABLE {
ID(int),
NAME(varchar),
AVAILABLEOPTIONS(varchar),
etc...
}
COLOROPTIONS_TABLE {
ID(int),
COLORNAME(varchare),
etc...
}
BODYOPTIONS_TABLE {
ID,
BODYNAME,
etc...
}
什麼是存儲在AVAILABLEOPTIONS字段中的值,讓我到指定範圍內的那些選項表和ID的最佳方式(即產品可能不適用於特定選項表中的所有選項)
我已經完成了一大堆研究(主要是在這個偉大的網站上),並觀察了JSON,串行化值,多維數組等,但我不確定最好的方法。
最後,AVAILABLEOPTIONS值將用於顯示產品頁面上的選項或用於構造表單以供用戶生成有效的產品代碼。我也會嘗試設置一個輸入表單,允許管理員爲數據庫中的存儲生成可用選項值。
任何提示或想法將不勝感激!
我不知道這是否是把這個更新正確的地方,但在這裏不用。
已經做了更多的研究,似乎多個值在單個字段中的存儲是一個明確的禁忌。我不確定EAV模型是否適合我的需求。但是,當涉及到規範我的數據庫要求時,我不確定我是否知道了。我想出了這一點:
的形象在這裏:http://dev.aqualux.com.au/images/1.png (不會讓我張貼圖片的編輯,因爲我太新來的...)
其中PID/OID在橙色表是外鍵。我沒有把握的問題是,任何給定的產品能有一個給定類型的多個選項,或者根本就沒有....
感謝
不要。不要將列表存儲在單個列中。做一些關於「規範化」的研究,並學習如何正確構建表格。你可以從這本[維基百科文章]開始(http://en.wikipedia.org/wiki/Database_normalization)。將列表存儲在單個列中使得在查詢(或幾乎任何其他用戶界面)中使用它非常困難。您也不會存儲對錶的引用;你通過ID在表上加入;如果您有多個選項,則應該在中間表中有多行,每個選項一個,並在該表中加入其他表。再次,研究。 :-) –
@KenWhite是絕對正確的。如果您將可用選項作爲列表存儲,這意味着您將永遠無法使用簡單的數據庫查詢來獲取數據 - 一切都將是查詢,將結果拉入PHP並解碼列表。這意味着一個簡單的問題,如「哪些產品藍色」最終將需要幾個單獨的查詢。可能會改爲創建一個AVAILABLEOPTIONS表,其中每個條目代表一個選項(因此該行的數據將包含產品ID,選項類型和選項ID),該表可以包含多個給定產品的條目。 – octern
謝謝肯。有很多人在尋找這樣做的方式,但我收集它並不是最好的方法。將繼續研究! – nickc