[請益] 商城的訂單資料庫設計

看板Soft_Job作者 (阿龍)時間2年前 (2021/06/14 03:22), 2年前編輯推噓13(13031)
留言44則, 18人參與, 2年前最新討論串1/3 (看更多)
想問問假使我有一個網路商城 使用者甲有可能會在A商店 買了 兩個羽球拍 一顆籃球 使用者乙有可能在A商店 買了 三雙球鞋 那麼我的訂單資料庫設計欄位 是應該要每個商品都要佔據一個列會比較適合嗎 訂單編號 商品名稱 店家名稱 商品數量 A1 羽球拍 A 2 A1 籃球 A 1 A2 球鞋 A 3 我的理解是使用者甲雖然買了兩樣東西,但是這是同一筆訂單,所以訂單編號要相同 我都假設成A1這樣 可是這樣設計的話,萬一使用者甲一次買十樣商品, 那我的資料庫不就要有十列來存 想問這有更好的設計方式嗎? 另外想問另外一個問題是 如果是一般的註冊使用者帳號密碼的表單傳到後端,我知道後端 可以用name來接收 但是如果是購物車 要怎麼樣把使用者 打勾的 羽球拍 籃球 都用json傳到後端 畢竟不同商店都有不同的產品清單 這方面我也不可能去把每一個商店的購物畫面都刻一遍 問題應該很基礎 希望可以得到一些hint 事情有google過 add multiple product into shopping cart 等關鍵字,但好像效果不彰qq -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 219.91.22.53 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1623612131.A.33C.html

06/14 04:53, 2年前 , 1F
1. 看你後續資料使用情境 沒有最好, 只有最適合
06/14 04:53, 1F

06/14 04:53, 2年前 , 2F
2. A商店的羽球拍和B商店的羽球拍 是同一個羽球拍嗎
06/14 04:53, 2F
不一樣,所以我想表格欄位應該從商品名稱改成商品編號,然後店家名稱應該可以刪掉 只是我這樣是不是要新增一個欄位是訂單的主鍵 因為訂單編號會重複,但主鍵不會 訂單的主鍵如果叫id 可能是 1,2,3,4,5,6,7 只是這個主鍵看起來沒有訂單編號有用?

06/14 05:59, 2年前 , 3F
1.傳統來說確實十筆沒錯,不然就是做其他設計,一個表
06/14 05:59, 3F

06/14 05:59, 2年前 , 4F
存key,另一個表做對應
06/14 05:59, 4F
存key 也是一種商品存一個列嗎?不然看起來好像也是買十樣存十列?

06/14 05:59, 2年前 , 5F
2.每個產品都要有key,傳key進後端做區別
06/14 05:59, 5F

06/14 06:07, 2年前 , 6F
訂單 跟 店家 可以再進一步正規化 不過這跟本版有關嗎
06/14 06:07, 6F

06/14 07:52, 2年前 , 7F
這是歷史資料,買了就不可該,最好不要用關聯,因為商
06/14 07:52, 7F

06/14 07:52, 2年前 , 8F
品可以不斷改
06/14 07:52, 8F

06/14 08:04, 2年前 , 9F
待過一個案子是把不需要用來搜的欄位存格式化字串
06/14 08:04, 9F

06/14 08:06, 2年前 , 10F
如 訂單:A1 data:"A,羽球拍,2,A籃球,1"
06/14 08:06, 10F

06/14 08:07, 2年前 , 11F
不過各種方法有好壞,像這樣就是改個資料要字串全覆寫
06/14 08:07, 11F

06/14 08:08, 2年前 , 12F
而且統計時要撈資料需要用的資料在字串內很難撈
06/14 08:08, 12F

06/14 08:09, 2年前 , 13F
訂正:A籃球,1=>A,籃球,1
06/14 08:09, 13F

06/14 08:14, 2年前 , 14F
Order<->OrderDetail<->Product
06/14 08:14, 14F

06/14 08:18, 2年前 , 15F
像前面有人提到的,正規化的部分研究一下
06/14 08:18, 15F

06/14 08:22, 2年前 , 16F
2. 不就把商品資料建起來就好,同上一筆筆建在Product內
06/14 08:22, 16F

06/14 08:23, 2年前 , 17F
ID, 商店名稱,商品代碼,商品中文名/英文名..看你要加啥
06/14 08:23, 17F

06/14 08:24, 2年前 , 18F
就苦功,但是建一次就好。RDBMS看一下啊,這是最基本的
06/14 08:24, 18F

06/14 08:36, 2年前 , 19F
串成字串,再交由後端的字串split api處理也夠完成作
06/14 08:36, 19F

06/14 08:36, 2年前 , 20F
業了,但是真實商城會有各種奇葩商品名稱,可能會讓s
06/14 08:36, 20F

06/14 08:36, 2年前 , 21F
plit無法正常運作。不過這種問題其實應該跟同學討論場
06/14 08:36, 21F

06/14 08:36, 2年前 , 22F
景來做表格設計還有normalization,以後出來混遇到才
06/14 08:36, 22F

06/14 08:36, 2年前 , 23F
會瞭解學生時期設計思慮不周全,然後印象更深刻
06/14 08:36, 23F
※ 編輯: ntpuisbest (219.91.22.53 臺灣), 06/14/2021 08:49:41

06/14 10:04, 2年前 , 24F
如果一個商品很多規格呢?
06/14 10:04, 24F

06/14 10:52, 2年前 , 25F
多一個 shop_id 做複合主鍵就解決了
06/14 10:52, 25F

06/14 10:54, 2年前 , 26F
至於 10 row 的問題只能跟你說,你即使存 json 之類的進
06/14 10:54, 26F

06/14 10:54, 2年前 , 27F
去再在後端解只是徒增維護人員理解的成本
06/14 10:54, 27F

06/14 10:54, 2年前 , 28F
DB 速度慢是要下更好的 SQL 處理
06/14 10:54, 28F

06/14 16:54, 2年前 , 29F
照正規化的概念就是這樣設計吧
06/14 16:54, 29F

06/14 17:10, 2年前 , 30F
建議原po先去看看資料庫正規化
06/14 17:10, 30F

06/14 21:58, 2年前 , 31F
商品很多規格要做商品類型,類型很多層一樣要再分
06/14 21:58, 31F

06/14 22:02, 2年前 , 32F
Class Diagram畫出來不就很清楚了
06/14 22:02, 32F

06/14 23:50, 2年前 , 33F
訂單資料是immutable的&一對多,你要不要用NoSQL來存?
06/14 23:50, 33F

06/15 00:24, 2年前 , 34F
原子性
06/15 00:24, 34F

06/15 02:45, 2年前 , 35F
建議還是看一下正規化比較好
06/15 02:45, 35F

06/15 04:29, 2年前 , 36F
這個我處理過,把訂單資訊存成json,子訂單是object arr
06/15 04:29, 36F

06/15 04:29, 2年前 , 37F
ay
06/15 04:29, 37F

06/15 04:31, 2年前 , 38F
pk設定成訂單編號,你把子訂單拆開存也是可以
06/15 04:31, 38F

06/15 04:31, 2年前 , 39F
但是要設定子訂單編號,不要直接用訂單編號
06/15 04:31, 39F

06/15 04:33, 2年前 , 40F
你的table不是只有存,也要複寫更改,存成json
06/15 04:33, 40F

06/15 04:33, 2年前 , 41F
是最方便的
06/15 04:33, 41F

06/15 04:35, 2年前 , 42F
天貓的資料同步給客戶的table 他們是這麼做的
06/15 04:35, 42F

06/15 10:14, 2年前 , 43F
訂單主檔一筆資料,訂單明細10筆。再去關聯商品
06/15 10:14, 43F

06/15 12:17, 2年前 , 44F
正規化先研究一下= =
06/15 12:17, 44F
文章代碼(AID): #1WnbhZCy (Soft_Job)
文章代碼(AID): #1WnbhZCy (Soft_Job)