描述 需要开发一个商品系统,卡在构思商品规格数据表设计这里,希望达成的效果是(统计方便)
需求 商品可以添加多种规格
商品规格可自定义
设计表
所有的规格信息存放于规格表中,字段名是写死的,来自规格字典表中的 suk_key (可能日后添加新规格需要添加新的规格字段)
商品表中的 suk_group 存放商品的规格顺序(为了方便查看,这里使用 suk_key 存储,以后改成 id )
帮我看看这种设计是否符合某种臆想中的标准。。。或者可能会出现哪些问题呢
1
hoythan OP 重点在于
所有的规格信息存放于规格表中,字段名是写死的,来自规格字典表中的 suk_key (可能日后添加新规格需要添加新的规格字段) 我觉得不是特别好 |
2
codeyung 2017-07-21 11:43:45 +08:00 1
我都定义成
`SKUVAL` varchar(1000) NOT NULL, 保存 [{"id":1481701101763,"type":2,"skuname":"颜色","skuval":"#ed0707"},{"id":1481701113228,"type":2,"skuname":"颜色","skuval":"#f9f4f4"},{"id":1481701122236,"type":2,"skuname":"颜色","skuval":"#110000"}] json |
3
aalska 2017-07-21 11:44:49 +08:00 3
难道不是叫 SKU 吗
|
5
hoythan OP @codeyung 最最最开始我也是这样想的,但是这样非常不便与统计,比如我要筛选出所有颜色为红色的商品,通过这种字符串的方式没法搜索或者不便与搜索。
|
6
2ME 2017-07-21 11:53:38 +08:00 1
除了主要的规格 其他的规格单独建一个字段用序列化或者 JSON 去存
|
10
avichen 2017-07-21 12:02:44 +08:00 1
规格定义到商品所属的最小级别分类上,在 SKU 上只要设置具体的规格值,LZ 看如何?
|
12
codeyung 2017-07-21 12:15:39 +08:00 via iPhone 1
@hoythan 每个产品都不一定一样的 可扩展的话用 json 比较合适 特征一样的可以拿出来比如每个商品都有的特征
|
13
lwbjing 2017-07-21 12:15:57 +08:00 1
可以参考一些开源系统或者是网上可以下到的系统的设计...
|
15
hoythan OP @codeyung 针对以上的需求,有什么更好的构思吗,我现在这个如果要添加新的规格类型就要手动插入一个字段名到数据表感觉不够”智能“
|
16
sunorg 2017-07-21 15:18:45 +08:00 via iPhone 1
EAv 模型完美解决
|
17
dushutaishao 2017-07-21 16:31:15 +08:00 1
个人意见:
商品表:一样,略; 规格字典表:一样,略; 规格表:( sku_key 可用 sku_id 代替) id sku_key detail 1 color 红色 2 color 绿色 3 color 黄色 4 size 36 码 5 size 37 码 商品规格关系表: id 商品 id 规格 id 1 1 1 2 1 2 3 1 4 4 1 5 5 2 1 6 2 2 7 2 3 8 2 5 |
18
hoythan OP |
19
TangMonk 2017-07-21 19:15:53 +08:00 via Android 1
去看看看一些开源的实现,比如 spree
|
21
kchum 2017-07-21 19:31:24 +08:00 1
@hoythan
稍微扩充一下 17 楼的 增加 SKU 关系 表 id sku_id sku_key_id 1 1 1 2 1 4 3 2 2 4 2 5 SKU 表( sku_keys 根据 sku 关系表生成) id 商品 id sku_name sku_keys stock 1 1 红色 36 码 1,4 100 2 1 绿色 27 码 2,5 23 商品表 略 商品: sku => 1:n 后台先填写商品公用基础信息,再根据商品添加规格添加 sku |
22
TangMonk 2017-07-21 19:58:39 +08:00 1
@hoythan 这个是使用 Ruby On Rails 开发的,我给你贴他的数据库 Schema 文件,是 Ruby 格式的,你应该看的懂:
https://github.com/spree/demo/blob/master/db/schema.rb |
23
guyskk 2017-07-21 20:07:24 +08:00 via Android 1
两张表解决
商品表: id,name,库存,销量 商品规格表: goods_id, name, value |
24
hoythan OP @guyskk
如果要找出 你的设计方法只能用于一种规格的商品 比如红色 库存 1 ... 需求是像淘宝一样有多种规格的 红色,32 码,套餐 1,10 库存 红色,33 码,套餐 1,10 库存 红色,34 码,套餐 1,10 库存 ... |
26
guyskk 2017-07-21 21:22:54 +08:00 via Android 1
@guyskk 抱歉没写完就发出去了。
颜色和尺码比较特殊,有对应的销量的库存。 商品表: id,name 商品规格表: id, goods_id, name, value 库存表: id, goods_id, 颜色, 尺寸, 销量,库存 |
27
hoythan OP @guyskk 你这个设计和我设计图上的设计一样的,就是直接吧 key 写成字段名了。这样以后修改可能比较繁琐,需要手动操作数据库。
|
28
runapp 2017-07-21 22:57:38 +08:00 1
我觉得除了不要直接用字符串存储,换 id 之外应该没啥问题
|
29
alex8 2017-07-21 23:08:55 +08:00 1
我做的 SKU 系统是附加上去的,商品表只有一个 skuId 字段,灵感来自京东,单个商品即 SKU 码
table goods: id:1 name: '阿迪王运动裤 黑色 M 码', skuId:1 id:2 name: '阿迪王运动裤 黑色 L 码', skuId:1 table sku: id:1,name:'阿迪王运动裤' json:{ types: ['颜色', '尺码'], typesData: [['黑色'],['M','L']], data: ['黑色\nM','黑色\nL'], goodsId: [1,2] } 展示单个 SKU 商品时,有 SKU 数据显示可选属性,点击组合后进入到该属性组合的商品。 |
30
guyskk 2017-07-21 23:13:52 +08:00 via Android 1
@hoythan 商品规格表里 name 列是规格名称,也就是把你设计的字段名存到数据表里,value 相当于字段的值,这样就解决了加新规格要加字段的问题。库存和颜色尺寸这个对应关系,我认为不适合放到商品规格表里,所以单独建表。
首先,查数据是非常方便的,关系都很简单。 1. 商品可以添加多种规格 添加一种规格也就是规格表中加一行数据,name 是规格名称,value 是规格的一个值。查询所有规格名称用 select distinct 实现。 2. 商品规格可自定义 一种规格可以有多个值,增加一个值就是规格表加一行(已存在就忽略),删一个值就是规格表减一行,更新值就是加一行再减一行。 |
31
hoythan OP |
32
cszchen 2017-07-22 08:29:18 +08:00 via iPhone
17 楼没毛病啊,还要怎么设计呢,动态属性解决电商商品属性就是最通行的方法
|