我正在尋找以下問題的最佳解決方案:
我有三張桌子:
- 產品
| ID | 產品名稱 |
|---|---|
| 1 | T恤 |
| 2 | 套衫 |
| 3 | 夾克 |
- 基本顏色
| ID | 基本顏色名稱 | allowedExtraColorIds |
|---|---|---|
| 1 | 綠色的 | 1,2 |
| 2 | 藍色的 | 2,3 |
| 3 | 紅色的 | 3 |
- 額外顏色
| ID | 額外顏色名稱 |
|---|---|
| 1 | 紫色的 |
| 2 | 橙子 |
| 3 | 黑色的 |
如您所見,表 Base 和 Extra Color 之間存在依賴關系。
- 因此,并非每種額外顏色都可以與每種基本顏色一起使用。對于基色“綠色”,僅允許選擇具有 ID“1 和 2”的額外顏色。
現在表格產品包含產品。但是我現在想要一個表單,用戶可以首先選擇產品,然后他可以將基礎顏色和額外顏色的組合映射到該產品。
例子:
- 用戶選擇“Tshirt”作為產品
- 現在他創建了組合:
- 他選擇了基礎顏色“綠色”并選擇了允許的額外顏色“紫色”
- 他選擇了基礎顏色“紅色”并選擇了允許的額外顏色“黑色”
現在我想知道如何保存這些資訊,以便在 MySql 資料庫中映射單個產品的 Base 和 Extra Colors 的不同組合。
有誰知道如何實作這一目標?:)
uj5u.com熱心網友回復:
您必須創建如下表來存盤生成的組合。
selected_products
ID product_id 用戶身份 1 1 1 2 2 1 selected_product_combinations
ID selected_product_id base_color_id extra_color_id 1 1 1 1 2 1 3 3
這里, selected_product_id 是對 selected_products 表的主鍵的外鍵參考。
uj5u.com熱心網友回復:
詳細說明@RiggsFolly 已經提出的建議:
- 使用 1 個顏色表。擁有兩個只會使情況復雜化
- 創建一個表格,其中所有可能的組合都作為單個專案列出 - 您甚至可以考慮添加產品以允許并非所有顏色都適用于所有產品的場景。
像這樣
| 產品 | 基本顏色 | 超彩 |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 1 | 2 |
這樣,所有檢查都變成了一個簡單的單例查詢,要么給出結果(允許組合),要么不給出結果(不允許組合)
這將稍微改變您的方法,但正如所說,這就是您使用 RDBMS 做事的方式。之后它會為你省去很多麻煩。
是的,要提出所有可能的組合,您將檢索結果集而不是一條記錄,但這很容易解決。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/482550.html
