2012-03-07 59 views
1

我正在設計一個作爲項目在線結賬的數據庫。這是我創建的第一個數據庫,所以對我來說很容易。無論如何,我有表「帳戶」,「訂單」,「購物車」和「sku」。帳戶包含運送信息,姓名,電話,電子郵件等。主鍵是accountNumber。訂單保存帳單信息。它的外鍵是accountNumber,它的主鍵是OrderID。購物車只有2列 - orderID和skuNumber。 OrderID是外鍵,skuNumber是主鍵。 SKU有4列 - skuNumber,數量,價格,單位和totalPrice。 skuNumber是外國和主鍵。數據庫設計幫助 - 在線結帳項目

我的問題是 - 我目前有這種設置的方式只能一次訂購1件SKU。你如何設計這種不同的方式,這是沒有必要的?我知道我可以做sku1,sku2等,但是這看起來好像違背了最佳實踐。

謝謝!

回答

1

你的數據庫是不是normaized通過這樣的設計,而不是SKU表,您將需要兩個額外的表,becouse你只需要分開prodcts細節(Nameprice,等...),從訂單的詳細信息,所以你必須添加以下表:

產品:

  • Id
  • Name
  • Price
  • ...

另外一個OrderItemsSKUItems包含以下幾列:

  • OrderID外鍵訂單表。
  • ProductId產品表的外鍵。
  • Quantity
  • ...

我不明白SKU是,但如果它是某種產品類型的,你可以添加額外的表ProductTypes: Id, name保存產品類型,這個表包含例如產品類型所謂SKU那麼你可以添加一個ProductTypeIdProducts,所以你可以有這樣的:

ProductTypeId | Name 
------------------------ 
     1   SKU 

對於Products表:

ID | Name | ProductTypeId 
----------------------------- 
1  SKU1  1 
2  SKU2  1 
3  SKU3  1 
+0

我應該對OrderItems表中的主鍵有什麼要求?另外,SKU就像條形碼。 – cmorris1441 2012-03-07 16:28:43

+0

@ cmorris1441,那麼,你有兩個選擇,第一個是使用兩個字段'ProductId'和'OrderId'作爲主鍵,第二個是使用[Surrogate Key](http://en.wikipedia.org/wiki)/Surrogate_key)就像'OrderItemId'。 – 2012-03-08 00:37:23

+0

我不喜歡OrderItemTable中的productId的想法。如果產品更改了產權,價格或其他財產,該怎麼辦?OrderItem可以在提交訂單後持續數月,甚至在歷史中。那將是一個令人誤解的訂單歷史頁面 – 2017-10-09 11:17:06