2013-10-03 129 views
0

我創建(並基本完成)購物車,並使用php,mysql和paypal存儲前端。有一件事正在困擾着我。我已經多次讀到它將簡單數據存儲在mysql列中的簡單形式,但我不知道如何處理這種情況。在數據庫中存儲可變數量的數據

我允許管理員添加新產品,然後爲產品設置可選的用戶選擇選項。例如,他們可能會添加一個名爲「phone」的產品,然後添加一個名爲「color」的選項,接受的選項爲「黑色,白色,紅色,灰色」。他們也可以出售沒有配置選項的A4紙和具有ALOT配置選項的一雙鞋(例如,鞋的尺碼可以選擇從4到13的女士和男士尺碼)。

因爲我不知道產品將有多少選項,我不想強​​制執行硬性限制我目前沒有「option1」,「option2」等列,而只是「 option_data「,它看起來像」顏色|紅色,黑色,白色,綠色#內存大小| 8GB,16GB,32GB「,並且我在#上爆炸以獲取不同的選項並在|獲取選項名稱和可能的數據,並最終分割數據,以獲得單獨的選項。我的商店然後解析所有這些,併產生用戶從下拉列表中選擇等

所以,考慮到存儲這樣的數據是嚴重皺眉,並且我不知道有多少選項產品將有,所以我不能只爲每一個列做一個列..我如何支持這個?

謝謝:)

回答

1

理想情況下,您應該通過創建單獨的表來規範化數據。

product_options

id INT 
product_id INT 
option_name VARCHAR 

product_option_values

id INT 
option_id INT 
value VARCHAR 
+0

不應該'product_option_values'有'請將option_value VARCHAR'? –

+0

謝謝,@FranciscoPresencia,我已經澄清了它。 – Denis

1

最好的做法是增加額外的表。一個用於存儲不同的選擇:

option 
    id 
    name  -- I.e. colour, memory, e.t.c. 
    product_id -- FK link to product 

和表格來存儲選項本身:

option_value 
    id 
    name  -- Choice i.e. red,blue, 5GB e.t.c. 
    option_id -- FK Link to option 
0

我建議堅持「每個變量/值組合的行」。 考慮下面的表方案爲您的產品變量:

TABLE Product_variables: 
    INT product_id 
    STRING variable_name 
    STRING variable_value 

然後你可以有:

product_id, variable_name, variable_value 
1, memory_size, 8gb 
1, memory_size, 16gb 
1, memory_size, 32gb 
1, colour, red