![](/img/trans.png)
[英]How to know if this entity diagram is properly normalized? With the picture below, would it be ok to build a simple database?
[英]How to properly build database
我遇到了一個問題,我想問你一些方向。 我有數據庫,如下圖所示。
1在我的應用程序中,我有預定義的產品,因此它們在文本框中自動彈出,取決於第一個字母。 我的問題是每種產品都有多種顏色可供選擇。 我不知道如何制作一張合適的桌子。 我應該只用顏色制作一張桌子嗎?
2假設客戶訂購了5台顯示器和4個同一訂單上的鍵盤。 我應該在哪里有數量? 在我的OrderProduct表中?
3如果客戶想要在所選項目上打印自定義標簽或其徽標,該怎么辦? 如果我在我的應用程序中選擇打印項目或貼紙,那么應該在數據庫中存儲哪些內容? 還在OrderProduct上?
添加一個名為Colors的表,並使其具有字段ID,可行名稱等。在Product中顯示它支持的Colors的按位值。
是的,您將擁有OrderProduct表中的數量。
這取決於他得到的貼紙類型。 貼紙是他可以選擇的貼紙還是他可以上傳的東西?
如果您的客戶需要能夠自定義每個項目,那么您應該將每個項目作為單獨插入到OrderProduct表中而不是具有數量字段 - 一旦您這樣做,只需引用標簽ID即可預定義或用戶定義。
回到顏色 - 就像我說的,如果你能夠自定義每個產品,那么為每個產品制作一個新的插入並刪除數量列,然后只需將ColorID列添加到OrderProduct表中,您將在其中定義顏色或定制的特定產品。
回應評論
應用程序需要知道每個項目的顏色,因此您可以使用黑色和灰色鍵盤,同時使用黑色和紅色顯示器。 除了數字之外,按位值就像標志系統。 讓我們說你有......
1 | Black
2 | Gray
3 | Red
如果一個產品可能有黑色和灰色你會做黑色,灰色到1,2。 如果產品有黑色和紅色,你會做黑色,紅色到1,3。 所有按位值都將其轉換為計算機可以更容易理解的值。
因此,為了獲得Black&Grey的按位值,您可以對ID進行平方並將其添加到一起(bor)。 一旦你有了這個值(這是按位值)你可以在它上面運行band以查看它是否具有該顏色。
對於PHP來說, 這是一個非常好的bitwise教程,我建議您閱讀它以獲取有關該主題的更多信息。
數據庫解決方案可以變化; 看到這對SO答案我的建議,如果你事先不知道的變量類型是什么,或者這個如果你這樣做。
根據您使用的解決方案,您可以在product_order表中包含對變量的引用。
此解決方案允許您擴展未來產品類型的解決方案而不會污染“product_order”表 - 如果您使用@Hans的建議包含一個位掩碼來指示顏色,並且您將尺寸作為另一個維度引入,很快您的“product_order”表開始包含很多產品結構知識,很難管理/驗證。
是的,數量通常包含在order_product表中(這通常稱為“訂單”)。 包含單價也是一個好主意 - 產品價格可能隨時間變化,並且您希望記錄客戶在下訂單時同意的價格。
對於自定義,您可能需要創建“order_customization”表,其中包含指向order_product表的鏈接以及所選的自定義,例如
OrderID ProductID Customization 1 2藍色貼紙1 1綠色貼紙
據推測,並非訂單上的所有商品都可以進行自定義; 如果一個數量> 1的order_product行可以為每個項目進行不同的自定義,那么您必須將其拆分得更遠......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.