2012-02-03 27 views
11

我從來沒有從頭開始設計數據庫/數據模型/模式,特別是對於Web應用程序。 在最近的一些工作面試中,我被要求爲購物車應用程序「設計」一個數據庫。現在我正在開發一個移動購物應用程序(零售店,使用phonegap),後端需要存儲和處理產品和訂單信息。這個問題的規模如此之大,我不知道從哪裏開始。我希望有一些建議 -爲購物車應用程序設計數據庫?

  1. 我應該如何處理這樣的問題(購物車應用程序數據庫)?我應該從哪裏開始?
  2. 我應該避免哪些常見的錯誤/陷阱?
  3. 在設計這樣的數據庫時,我應該記住哪些優化/效率範例?
  4. 我應該如何去確定問題空間中的實體(產品,訂單等)?我應該如何得出它們之間的關係?
  5. 面試官問這樣一個問題時,他究竟在尋找什麼?有什麼我應該/不應該說的?

我也應該澄清的是 -

  1. 是的,我是一個菜鳥,我的動機是學習數據庫設計和即將到來的面試做準備。我已閱讀DBMS書籍,詳細描述了各個概念,但我不知道如何將這些東西放在一起並開始設計數據庫。
  2. 我已經看到數據庫設計的其他線程。作者已經傾向於擁有關於如何打破問題的一些知識。我想了解做這件事的方法。
  3. 鏈接到外部資源,意見,建議和任何將使我走上正軌的任何事情,都非常感激。我希望這個線程能夠爲我和其他人提供學習體驗。
+1

感謝您對標準化的響應和信息的列表。 作爲一個新手,我必須從我的角度澄清 - 對於新手來說,要理解複雜的數據庫設計在購物車或銀行業務中是非常困難的。這與理解數據庫設計的基礎知識較少有關,更多與理解域以及如何分解域以獲得一個好的解決方案有關。上面的答案在提供簡潔的解決方案方面做得很好,可以解答這兩個問題 - 設計基礎知識和領域知識。 常識只能帶你到目前爲止。 – 2012-02-15 10:22:07

回答

14

可以有數據庫五個表:

類別該表存儲有關您的商店和類別層次的產品類別的信息。
此表的父字段存儲父類別的標識。

產品您商店的所有產品都存儲在這張表中。該表具有識別產品所屬類別的ID的外鍵類別ID。

ORDER此表存儲有關您商店訪問者所做的所有訂單的信息。

ORDERED_SHOPPING_CART表與PRODUCT和ORDER表緊密相連;存儲客戶訂單內容的信息。

SPECIAL_OFFER表中包含的產品,這是顯示主頁上的特殊優惠

+0

我不是主張它,但發現它可以幫助您更好地形象化您的問題,並且包括/涵蓋購物車應用程序的最大需求。即使我還沒有構建任何購物數據庫,所以這也是我感興趣的問題 – Devjosh 2012-02-03 07:30:06

+1

這對我來說是一個很好的開始設計我的設計技能的工作。 +1互聯網給你。 – 2012-02-15 10:08:14

+0

這很好,我很高興它幫助你。所有最好的 – Devjosh 2012-02-15 11:03:08

11

簡單的答案是我會解決這個問題的方法。首先,有大量開源或免費的基於Web的購物車。這意味着你可以得到一個,建立數據庫,然後仔細看看他們做了什麼。

問問你自己的問題,爲什麼他們這樣做?爲什麼它好?會有什麼缺點?我將如何做不同?爲什麼?

我會試着購買一個數據庫設計工具,讓您可視化數據庫。 (比如Visual Studio中的數據庫設計師,或者我有一個來自MicroOlap的pgsql數據庫)

然後,您需要考慮在數據庫中需要什麼。客戶要做什麼?購買產品!因此你需要一個產品表。如果沒有沿着整條路線走下去,你可以看到這一點。想象一下,需要什麼,然後基本上爲它製作一張桌子。

如果您在一個表中有一個以上的字段選項,請創建另一個帶有關係的表。所以如果你有一個產品表,並且你有一個狀態字段。你可以有多個狀態。 (如缺貨,數量有限,大件商品,價格昂貴),而不是硬編碼這些字段,製作一個表格並允許用戶添加項目到表格。然後在產品表中添加一個字段status_id並將其鏈接到狀態表

許多許多關係都是有用的知識。 (我自己也不太明白)說你有一個組件和產品表。產品可以由許多組件組成,組件可以分配給許多產品。創建一箇中介表。就像prodcomp(在這裏你會有像id,prod_id,comp_id,qtyneeded等字段)。

學會index correctly

在您對其工作原理有一個明確的概念之前,不要創建數據庫。這爲以後重新創建節省了時間。

可能還有更多,但是,我希望我給你一個好的開始。