簡體   English   中英

如何正確構建數據庫

[英]How to properly build database

我遇到了一個問題,我想問你一些方向。 我有數據庫,如下圖所示。 在此輸入圖像描述

1在我的應用程序中,我有預定義的產品,因此它們在文本框中自動彈出,取決於第一個字母。 我的問題是每種產品都有多種顏色可供選擇。 我不知道如何制作一張合適的桌子。 我應該只用顏色制作一張桌子嗎?

2假設客戶訂購了5台顯示器和4個同一訂單上的鍵盤。 我應該在哪里有數量? 在我的OrderProduct表中?

3如果客戶想要在所選項目上打印自定義標簽或其徽標,該怎么辦? 如果我在我的應用程序中選擇打印項目或貼紙,那么應該在數據庫中存儲哪些內容? 還在OrderProduct上?

  1. 添加一個名為Colors的表,並使其具有字段ID,可行名稱等。在Product中顯示它支持的Colors的按位值。

  2. 是的,您將擁有OrderProduct表中的數量。

  3. 這取決於他得到的貼紙類型。 貼紙是他可以選擇的貼紙還是他可以上傳的東西?

如果您的客戶需要能夠自定義每個項目,那么您應該將每個項目作為單獨插入到OrderProduct表中而不是具有數量字段 - 一旦您這樣做,只需引用標簽ID即可預定義或用戶定義。

回到顏色 - 就像我說的,如果你能夠自定義每個產品,那么為每個產品制作一個新的插入並刪除數量列,然后只需將ColorID列添加到OrderProduct表中,您將在其中定義顏色或定制的特定產品。


回應評論

應用程序需要知道每個項目的顏色,因此您可以使用黑色和灰色鍵盤,同時使用黑色和紅色顯示器。 除了數字之外,按位值就像標志系統。 讓我們說你有......

1 | Black
2 | Gray
3 | Red

如果一個產品可能有黑色和灰色你會做黑色,灰色到1,2。 如果產品有黑色和紅色,你會做黑色,紅色到1,3。 所有按位值都將其轉換為計算機可以更容易理解的值。

因此,為了獲得Black&Grey的按位值,您可以對ID進行平方並將其添加到一起(bor)。 一旦你有了這個值(這是按位值)你可以在它上面運行band以查看它是否具有該顏色。

對於PHP來說, 是一個非常好的bitwise教程,我建議您閱讀它以獲取有關該主題的更多信息。

  1. 您描述的問題 - “產品”有多種顏色可供選擇 - 很常見; 標准解決方案是引入“產品變體”的概念。 例如,T恤有多種顏色和多種尺寸可供選擇; 鞋子有多種尺寸等。

數據庫解決方案可以變化; 看到對SO答案我的建議,如果你事先不知道的變量類型是什么,或者這個如果你這樣做。

根據您使用的解決方案,您可以在product_order表中包含對變量的引用。

此解決方案允許您擴展未來產品類型的解決方案而不會污染“product_order”表 - 如果您使用@Hans的建議包含一個位掩碼來指示顏色,並且您將尺寸作為另一個維度引入,很快您的“product_order”表開始包含很多產品結構知識,很難管理/驗證。

  1. 是的,數量通常包含在order_product表中(這通常稱為“訂單”)。 包含單價也是一個好主意 - 產品價格可能隨時間變化,並且您希望記錄客戶在下訂單時同意的價格。

  2. 對於自定義,您可能需要創建“order_customization”表,其中包含指向order_product表的鏈接以及所選的自定義,例如

    OrderID ProductID Customization 1 2藍色貼紙1 1綠色貼紙

據推測,並非訂單上的所有商品都可以進行自定義; 如果一個數量> 1的order_product行可以為每個項目進行不同的自定義,那么您必須將其拆分得更遠......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM