V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hoythan
V2EX  ›  程序员

[进来就感谢] 求商品规格( suk)数据表设计意见

  •  
  •   hoythan · 2017-07-21 11:26:26 +08:00 · 3840 次点击
    这是一个创建于 2676 天前的主题,其中的信息可能已经有所发展或是发生改变。

    描述 需要开发一个商品系统,卡在构思商品规格数据表设计这里,希望达成的效果是(统计方便)

    需求 商品可以添加多种规格

    商品规格可自定义

    设计表

    所有的规格信息存放于规格表中,字段名是写死的,来自规格字典表中的 suk_key (可能日后添加新规格需要添加新的规格字段)

    商品表中的 suk_group 存放商品的规格顺序(为了方便查看,这里使用 suk_key 存储,以后改成 id )

    帮我看看这种设计是否符合某种臆想中的标准。。。或者可能会出现哪些问题呢

    32 条回复    2017-07-22 08:29:18 +08:00
    hoythan
        1
    hoythan  
    OP
       2017-07-21 11:42:33 +08:00
    重点在于

    所有的规格信息存放于规格表中,字段名是写死的,来自规格字典表中的 suk_key (可能日后添加新规格需要添加新的规格字段)

    我觉得不是特别好
    codeyung
        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
    aalska
        3
    aalska  
       2017-07-21 11:44:49 +08:00   ❤️ 3
    难道不是叫 SKU 吗
    hoythan
        4
    hoythan  
    OP
       2017-07-21 11:50:48 +08:00
    @aalska 乱了,傻傻搞不清嘿嘿 忽略
    hoythan
        5
    hoythan  
    OP
       2017-07-21 11:52:17 +08:00
    @codeyung 最最最开始我也是这样想的,但是这样非常不便与统计,比如我要筛选出所有颜色为红色的商品,通过这种字符串的方式没法搜索或者不便与搜索。
    2ME
        6
    2ME  
       2017-07-21 11:53:38 +08:00   ❤️ 1
    除了主要的规格 其他的规格单独建一个字段用序列化或者 JSON 去存
    hoythan
        7
    hoythan  
    OP
       2017-07-21 11:56:02 +08:00
    @2ME 感觉不便与搜索与统计
    2ME
        8
    2ME  
       2017-07-21 11:59:12 +08:00   ❤️ 1
    @hoythan 想方便搜索的话就建个关联表 里面存 商品 id 规格 规格内容
    hoythan
        9
    hoythan  
    OP
       2017-07-21 12:00:52 +08:00
    @2ME 以我上面的设计,你有什么看法或者建议
    avichen
        10
    avichen  
       2017-07-21 12:02:44 +08:00   ❤️ 1
    规格定义到商品所属的最小级别分类上,在 SKU 上只要设置具体的规格值,LZ 看如何?
    hoythan
        11
    hoythan  
    OP
       2017-07-21 12:06:55 +08:00
    @avichen 没理解明白,求详解 ❤️你
    codeyung
        12
    codeyung  
       2017-07-21 12:15:39 +08:00 via iPhone   ❤️ 1
    @hoythan 每个产品都不一定一样的 可扩展的话用 json 比较合适 特征一样的可以拿出来比如每个商品都有的特征
    lwbjing
        13
    lwbjing  
       2017-07-21 12:15:57 +08:00   ❤️ 1
    可以参考一些开源系统或者是网上可以下到的系统的设计...
    hoythan
        14
    hoythan  
    OP
       2017-07-21 12:17:38 +08:00
    @lwbjing 着实不好找哎
    hoythan
        15
    hoythan  
    OP
       2017-07-21 12:18:30 +08:00
    @codeyung 针对以上的需求,有什么更好的构思吗,我现在这个如果要添加新的规格类型就要手动插入一个字段名到数据表感觉不够”智能“
    sunorg
        16
    sunorg  
       2017-07-21 15:18:45 +08:00 via iPhone   ❤️ 1
    EAv 模型完美解决
    dushutaishao
        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
    hoythan
        18
    hoythan  
    OP
       2017-07-21 19:12:58 +08:00
    @dushutaishao 这样会有一些问题,
    例如一个商品规格有颜色,尺码。
    比如
    红色,38 尺 有一个商品数量
    红色,39 尺 有一个商品数量

    你的这种设计方法吧属性给分开了,没法设置商品数量等其他参数
    TangMonk
        19
    TangMonk  
       2017-07-21 19:15:53 +08:00 via Android   ❤️ 1
    去看看看一些开源的实现,比如 spree
    hoythan
        20
    hoythan  
    OP
       2017-07-21 19:22:15 +08:00
    @TangMonk 不了解这语言,请问有他的数据库结构图吗
    kchum
        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
    TangMonk
        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
    guyskk
        23
    guyskk  
       2017-07-21 20:07:24 +08:00 via Android   ❤️ 1
    两张表解决
    商品表: id,name,库存,销量
    商品规格表: goods_id, name, value
    hoythan
        24
    hoythan  
    OP
       2017-07-21 20:49:56 +08:00
    @guyskk
    如果要找出
    你的设计方法只能用于一种规格的商品
    比如红色 库存 1 ...

    需求是像淘宝一样有多种规格的
    红色,32 码,套餐 1,10 库存
    红色,33 码,套餐 1,10 库存
    红色,34 码,套餐 1,10 库存
    ...
    guyskk
        25
    guyskk  
       2017-07-21 21:18:28 +08:00 via Android   ❤️ 1
    @hoythan 明白你的意思了,颜色和尺码
    guyskk
        26
    guyskk  
       2017-07-21 21:22:54 +08:00 via Android   ❤️ 1
    @guyskk 抱歉没写完就发出去了。
    颜色和尺码比较特殊,有对应的销量的库存。

    商品表: id,name
    商品规格表: id, goods_id, name, value
    库存表: id, goods_id, 颜色, 尺寸, 销量,库存
    hoythan
        27
    hoythan  
    OP
       2017-07-21 22:40:13 +08:00
    @guyskk 你这个设计和我设计图上的设计一样的,就是直接吧 key 写成字段名了。这样以后修改可能比较繁琐,需要手动操作数据库。
    runapp
        28
    runapp  
       2017-07-21 22:57:38 +08:00   ❤️ 1
    我觉得除了不要直接用字符串存储,换 id 之外应该没啥问题
    alex8
        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 数据显示可选属性,点击组合后进入到该属性组合的商品。
    guyskk
        30
    guyskk  
       2017-07-21 23:13:52 +08:00 via Android   ❤️ 1
    @hoythan 商品规格表里 name 列是规格名称,也就是把你设计的字段名存到数据表里,value 相当于字段的值,这样就解决了加新规格要加字段的问题。库存和颜色尺寸这个对应关系,我认为不适合放到商品规格表里,所以单独建表。

    首先,查数据是非常方便的,关系都很简单。
    1. 商品可以添加多种规格
    添加一种规格也就是规格表中加一行数据,name 是规格名称,value 是规格的一个值。查询所有规格名称用 select distinct 实现。
    2. 商品规格可自定义
    一种规格可以有多个值,增加一个值就是规格表加一行(已存在就忽略),删一个值就是规格表减一行,更新值就是加一行再减一行。
    hoythan
        31
    hoythan  
    OP
       2017-07-22 02:29:16 +08:00
    cszchen
        32
    cszchen  
       2017-07-22 08:29:18 +08:00 via iPhone
    17 楼没毛病啊,还要怎么设计呢,动态属性解决电商商品属性就是最通行的方法
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2750 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 07:31 · PVG 15:31 · LAX 23:31 · JFK 02:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.