作者ntpuisbest (阿龙)
看板Soft_Job
标题[请益] 商城的订单资料库设计
时间Mon Jun 14 03:22:09 2021
想问问假使我有一个网路商城
使用者甲有可能会在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://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1623612131.A.33C.html
1F:→ kkkoooiii2: 1. 看你後续资料使用情境 没有最好, 只有最适合06/14 04:53
2F:→ kkkoooiii2: 2. A商店的羽球拍和B商店的羽球拍 是同一个羽球拍吗06/14 04:53
不一样,所以我想表格栏位应该从商品名称改成商品编号,然後店家名称应该可以删掉
只是我这样是不是要新增一个栏位是订单的主键
因为订单编号会重复,但主键不会
订单的主键如果叫id 可能是 1,2,3,4,5,6,7
只是这个主键看起来没有订单编号有用?
3F:→ Kitten1156: 1.传统来说确实十笔没错,不然就是做其他设计,一个表06/14 05:59
4F:→ Kitten1156: 存key,另一个表做对应06/14 05:59
存key 也是一种商品存一个列吗?不然看起来好像也是买十样存十列?
5F:→ Kitten1156: 2.每个产品都要有key,传key进後端做区别06/14 05:59
6F:→ siriusu: 订单 跟 店家 可以再进一步正规化 不过这跟本版有关吗06/14 06:07
7F:→ MonyemLi: 这是历史资料,买了就不可该,最好不要用关联,因为商06/14 07:52
8F:→ MonyemLi: 品可以不断改06/14 07:52
9F:推 somefatguy: 待过一个案子是把不需要用来搜的栏位存格式化字串06/14 08:04
10F:→ somefatguy: 如 订单:A1 data:"A,羽球拍,2,A篮球,1"06/14 08:06
11F:→ somefatguy: 不过各种方法有好坏,像这样就是改个资料要字串全覆写06/14 08:07
12F:→ somefatguy: 而且统计时要捞资料需要用的资料在字串内很难捞06/14 08:08
13F:→ somefatguy: 订正:A篮球,1=>A,篮球,106/14 08:09
14F:→ bheegrl: Order<->OrderDetail<->Product06/14 08:14
15F:→ bheegrl: 像前面有人提到的,正规化的部分研究一下06/14 08:18
16F:→ bheegrl: 2. 不就把商品资料建起来就好,同上一笔笔建在Product内06/14 08:22
17F:→ bheegrl: ID, 商店名称,商品代码,商品中文名/英文名..看你要加啥06/14 08:23
18F:→ bheegrl: 就苦功,但是建一次就好。RDBMS看一下啊,这是最基本的06/14 08:24
19F:→ BlacksPig: 串成字串,再交由後端的字串split api处理也够完成作06/14 08:36
20F:→ BlacksPig: 业了,但是真实商城会有各种奇葩商品名称,可能会让s06/14 08:36
21F:→ BlacksPig: plit无法正常运作。不过这种问题其实应该跟同学讨论场06/14 08:36
22F:→ BlacksPig: 景来做表格设计还有normalization,以後出来混遇到才 06/14 08:36
23F:→ BlacksPig: 会了解学生时期设计思虑不周全,然後印象更深刻06/14 08:36
※ 编辑: ntpuisbest (219.91.22.53 台湾), 06/14/2021 08:49:41
24F:推 gorocky: 如果一个商品很多规格呢? 06/14 10:04
25F:推 xxxxae86: 多一个 shop_id 做复合主键就解决了 06/14 10:52
26F:→ xxxxae86: 至於 10 row 的问题只能跟你说,你即使存 json 之类的进 06/14 10:54
27F:→ xxxxae86: 去再在後端解只是徒增维护人员理解的成本 06/14 10:54
28F:→ xxxxae86: DB 速度慢是要下更好的 SQL 处理 06/14 10:54
29F:推 holebro: 照正规化的概念就是这样设计吧 06/14 16:54
30F:推 sherees: 建议原po先去看看资料库正规化 06/14 17:10
31F:推 KY1998: 商品很多规格要做商品类型,类型很多层一样要再分 06/14 21:58
32F:→ KY1998: Class Diagram画出来不就很清楚了 06/14 22:02
33F:推 MyNion: 订单资料是immutable的&一对多,你要不要用NoSQL来存? 06/14 23:50
34F:推 new122851: 原子性 06/15 00:24
35F:推 bill0205: 建议还是看一下正规化比较好 06/15 02:45
36F:推 acgotaku: 这个我处理过,把订单资讯存成json,子订单是object arr 06/15 04:29
37F:→ acgotaku: ay 06/15 04:29
38F:推 acgotaku: pk设定成订单编号,你把子订单拆开存也是可以 06/15 04:31
39F:→ acgotaku: 但是要设定子订单编号,不要直接用订单编号 06/15 04:31
40F:→ acgotaku: 你的table不是只有存,也要复写更改,存成json 06/15 04:33
41F:→ acgotaku: 是最方便的 06/15 04:33
42F:→ acgotaku: 天猫的资料同步给客户的table 他们是这麽做的 06/15 04:35
43F:推 waypin2002: 订单主档一笔资料,订单明细10笔。再去关联商品 06/15 10:14
44F:推 rahit: 正规化先研究一下= = 06/15 12:17