2011-11-28 70 views
2

我開始銷售T恤和鞋子的新的電子商務Web應用程序(pet項目)。我的商店只有免費尺寸的T恤,所以T恤只有顏色欄,而鞋有尺寸和顏色的欄。如何設計數據庫,所有產品類型的表格或每種產品類型的每個表格?

現在是創建表來存儲這些數據的時候了,我想知道爲鞋和T恤創建單獨的桌面還是將所有桌面都放在一張桌子上更好?

如果有更好的想法來存儲這些數據,請讓我知道。

回答

9

您絕對不會不想創建鞋子表和TShirt表。你的店可能會增長,有一天你會有一千個這樣的產品表。爲此編寫SQL將是一場噩夢。另外,你最終可能會有不同種類的T恤,有些有顏色,有的有尺寸和顏色,等等。如果你爲每個人創建一張新桌子,你會很快失去他們的蹤跡,如果你不這樣做,爲什麼要爲T恤衫和鞋子分開放置桌子,但是不能放置單一尺寸的T恤衫和多尺寸的T足球衫?

在設計數據庫時,您應該問自己:我的領域中有哪些實體?哪些東西永遠不會改變,並且是唯一可識別的東西?在商店中,可以以特定價格銷售的特定商品就是這樣一個實體。所以,你可能有一個產品表中有你賣的每個特定項目的關鍵,也許一個名稱,類型,大小和顏色柱:

item 
id | type | name  | size | color 
------------------------------------ 
1 | shoe | Marathon | 9  | white 
2 | shoe | Marathon | 9  | black 

看着這個表,你注意到我們有兩個入圍的馬拉松跑鞋非常成功,這似乎是一種違規行爲。事實上,你可能有兩個實體可以運送物品和目錄產品。鞋子「馬拉松」可能是在您的商店中有一張圖片和一張描述的商品,後面是「可用於以下顏色和尺寸:」的商品。所以,現在你有兩個表:

product 
id | type | name  | supplier  | picture  | description 
-------------------------------------------------------------------------------------- 
1 | shoe | Marathon | TrackNField Co. | marathon.jpg | Run faster than light! 
2 | tshirt | FlowerPower | SF Shirts  | fpower.jpg | If you're going to San Francisco... 


item 
id | product_id | size | color | price 
-------------------------------------- 
1 | 1   | 9 | white | 99.99 
2 | 1   | 9 | black | 99.99 
3 | 2   |  | blue | 19.99 

在產品表中的「類型」一欄可以是一個棘手的一個。您可能希望按類別展示產品,讓用戶點擊「鞋子」並獲取所有類型爲「鞋子」的產品。到目前爲止,很容易,但最終有人會錯誤輸入「sheo」,然後你再也找不到鞋子下的產品了。所以,最好是由具有產品類型表分類從產品中分離,例如:

product_type 
id | name 
--------- 
1 | shoe 


product 
id | type_id | name  | supplier  | picture  | description 
-------------------------------------------------------------------------------------- 
1 | 1   | Marathon | TrackNField Co. | marathon.jpg | Run faster than light! 

與在產品表中的類型的引用。沒關係,只要你的類型層次保持淺,但是如果你想要有子類別,比如「運動鞋」,「籃球鞋」,「絨面革鞋」等等,該怎麼辦?一隻鞋子甚至可能屬於這些子類別中的幾個。在這種情況下,你可以試試這個

category 
id | name   | supercategory_id 
------------------------------------ 
1 | shoe   | 
2 | running shoe | 1 


product_category 
product_id | category_id 
------------------------ 
1   | 2 


product 
id | name  | supplier  | picture  | description 
-------------------------------------------------------------------------------------- 
1 | Marathon | TrackNField Co. | marathon.jpg | Run faster than light! 

如果你想顯示分類已的多個層次(如最大電子商務網站做的這些天),你就必須拿出更復雜的東西。

+0

+1好解釋 –

4

將它們全部保存在一張表中,並且有一個type字段。這樣做的原因是爲了讓您的數據結構具有可擴展性:例如,如果存在新類型的產品,而不是添加新表並且不得不大幅改變應用程序代碼,那麼您只需使用相同的表並簡單地添加一個type

0

如果您不想讓它變得複雜,您可以將它們全部放在同一張桌子上,並創建另一個名爲「ProductType」的表格,告訴您它是鞋子還是T恤衫。 這種關係在「ProductType」方面是一對多的,因爲您可以將產品的相關類型與產品表上的多個記錄相關聯(您存儲所有產品的地方)

相關問題