锁定老帖子 主题:淘宝商品价格存储结构设计
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-09-26
osacar 写道 dagmom 写道 一个商品对应多个价格需要另存一张表,性能还好吧,但是你说的不同size对应不同的价格,那么如果再加一个别的比如颜色,你情以何堪,不同size、color,那应该当作不同商品去做,你看看京东、易讯之类的就知道,选择size之后productId是不同的
呵,可能我们的应用有点特殊,这些产品就只有size这个属性,没有颜色或其他规格属性。 目前我的价格表是这样设置的。不知合适否。 id productid sizename price 1 1 L 100 2 1 XL 125 3 1 XXL 130 如果需要有扩展,可以另外定义一张属性表(用于属性扩展),建立product和属性的关联(product有点类似于抽象产品,只有属性定义),还需要另一张conceret product表,用来存储product上定义的属性的值。如果需要详细点的描述,可以查查erp中style item和SKU item的概念,比较类似。 |
|
返回顶楼 | |
发表时间:2012-09-26
最后修改:2012-09-26
osacar 写道 dagmom 写道 一个商品对应多个价格需要另存一张表,性能还好吧,但是你说的不同size对应不同的价格,那么如果再加一个别的比如颜色,你情以何堪,不同size、color,那应该当作不同商品去做,你看看京东、易讯之类的就知道,选择size之后productId是不同的
呵,可能我们的应用有点特殊,这些产品就只有size这个属性,没有颜色或其他规格属性。 目前我的价格表是这样设置的。不知合适否。 id productid sizename price 1 1 L 100 2 1 XL 125 3 1 XXL 130 我水平也有限,说下自己的看法 dagmom 的方法,size还是要存对应的productID信息,最终还是绕不开size单独保存(价格/productID)。但damom也算是一种思路,学习了,谢谢 ![]() osacar 的表,个人优化建议,删除id列,productID,sizename联合主键。原因: 此表特性,是管理员进行维护,不会有太多频繁更新/插入, 大部分查询使用=查询,而且都会包含price列 少部分统计price会用到范围查询,可以单独建price索引(此处不讨论) 猜想原表结构索引,id主键,唯一索引(productid,sizename) 查询效率分析: 原设计,由于使用=查询,所以肯定会走唯一索引,再根据主键id查找相应的price 优化后,直接进行主键查找 欢迎大家拍砖 |
|
返回顶楼 | |
发表时间:2012-09-26
babaoqi 写道 osacar 写道 dagmom 写道 一个商品对应多个价格需要另存一张表,性能还好吧,但是你说的不同size对应不同的价格,那么如果再加一个别的比如颜色,你情以何堪,不同size、color,那应该当作不同商品去做,你看看京东、易讯之类的就知道,选择size之后productId是不同的
呵,可能我们的应用有点特殊,这些产品就只有size这个属性,没有颜色或其他规格属性。 目前我的价格表是这样设置的。不知合适否。 id productid sizename price 1 1 L 100 2 1 XL 125 3 1 XXL 130 我水平也有限,说下自己的看法 dagmom 的方法,size还是要存对应的productID信息,最终还是绕不开size单独保存(价格/productID)。但damom也算是一种思路,学习了,谢谢 ![]() osacar 的表,个人优化建议,删除id列,productID,sizename联合主键。原因: 此表特性,是管理员进行维护,不会有太多频繁更新/插入, 大部分查询使用=查询,而且都会包含price列 少部分统计price会用到范围查询,可以单独建price索引(此处不讨论) 猜想原表结构索引,id主键,唯一索引(productid,sizename) 查询效率分析: 原设计,由于使用=查询,所以肯定会走唯一索引,再根据主键id查找相应的price 优化后,直接进行主键查找 欢迎大家拍砖 ![]() ![]() 你的优化建议也不错,联合主键我之前没想过。 我只做了productid索引,sizename没做,因为sizename可能为空。比如,一个产品只有一个价格的时候,sizename就可有可无,默认是无。查询使用=productid,一次把产品的所有价格全取出。只有在更新删除时使用id。 我想问一下,查询时是使用product表join price表好还是把查询分成两次查询好?即先select product 然后再次select price。(price表记录数比product表大很多) |
|
返回顶楼 | |
发表时间:2012-09-26
osacar 写道 babaoqi 写道 osacar 写道 dagmom 写道 一个商品对应多个价格需要另存一张表,性能还好吧,但是你说的不同size对应不同的价格,那么如果再加一个别的比如颜色,你情以何堪,不同size、color,那应该当作不同商品去做,你看看京东、易讯之类的就知道,选择size之后productId是不同的
呵,可能我们的应用有点特殊,这些产品就只有size这个属性,没有颜色或其他规格属性。 目前我的价格表是这样设置的。不知合适否。 id productid sizename price 1 1 L 100 2 1 XL 125 3 1 XXL 130 我水平也有限,说下自己的看法 dagmom 的方法,size还是要存对应的productID信息,最终还是绕不开size单独保存(价格/productID)。但damom也算是一种思路,学习了,谢谢 ![]() osacar 的表,个人优化建议,删除id列,productID,sizename联合主键。原因: 此表特性,是管理员进行维护,不会有太多频繁更新/插入, 大部分查询使用=查询,而且都会包含price列 少部分统计price会用到范围查询,可以单独建price索引(此处不讨论) 猜想原表结构索引,id主键,唯一索引(productid,sizename) 查询效率分析: 原设计,由于使用=查询,所以肯定会走唯一索引,再根据主键id查找相应的price 优化后,直接进行主键查找 欢迎大家拍砖 ![]() ![]() 你的优化建议也不错,联合主键我之前没想过。 我只做了productid索引,sizename没做,因为sizename可能为空。比如,一个产品只有一个价格的时候,sizename就可有可无,默认是无。查询使用=productid,一次把产品的所有价格全取出。只有在更新删除时使用id。 我想问一下,查询时是使用product表join price表好还是把查询分成两次查询好?即先select product 然后再次select price。(price表记录数比product表大很多) 个人感觉用一个存储过程,每个表单独查询,这样相当于你自己做了join的逻辑,这个逻辑也不复杂,可以帮数据库分担下 |
|
返回顶楼 | |
发表时间:2012-09-26
太标题党了!!!!。。。。。。。。。。。。
类似淘宝产品价格存储的表, 变成 淘宝商品价格存储结构设计。。。 原来以为内容有用, 进去之后,失望阿。。。。。。 |
|
返回顶楼 | |
发表时间:2012-09-26
如果增加灵活性的话,可以考虑增量价格的设计
商品基础表: productid 商品其他字段,是否有增量字段,最低价格price 1 yes 100 增量价格表 productid type typename price 1 size L 0 1 size XL 25 1 size XXL 30 1 color red 10 1 color blue 5 .......... 这样价格就是基础价格上家选择各个类型子和 商品1 size=XL color=red 的价格为100+25+5=130 考虑到很多情况下商品不是有人以的组合,而且也为了减少复杂度,可以对增量表做一下简化 id productId name price 1 1 红色L号 10 2 1 红色XXL号 40 3 1 蓝色XL号 30 这两种具体看需求,淘宝从应用角度讲,实现的是上一种,当然上一种也包容了下面的设计 |
|
返回顶楼 | |
发表时间:2012-09-26
lavafree 写道 如果增加灵活性的话,可以考虑增量价格的设计
商品基础表: productid 商品其他字段,是否有增量字段,最低价格price 1 yes 100 增量价格表 productid type typename price 1 size L 0 1 size XL 25 1 size XXL 30 1 color red 10 1 color blue 5 .......... 这样价格就是基础价格上家选择各个类型子和 商品1 size=XL color=red 的价格为100+25+5=130 考虑到很多情况下商品不是有人以的组合,而且也为了减少复杂度,可以对增量表做一下简化 id productId name price 1 1 红色L号 10 2 1 红色XXL号 40 3 1 蓝色XL号 30 这两种具体看需求,淘宝从应用角度讲,实现的是上一种,当然上一种也包容了下面的设计 ![]() |
|
返回顶楼 | |
发表时间:2012-09-26
最后修改:2012-09-26
lavafree 写道 如果增加灵活性的话,可以考虑增量价格的设计
商品基础表: productid 商品其他字段,是否有增量字段,最低价格price 1 yes 100 增量价格表 productid type typename price 1 size L 0 1 size XL 25 1 size XXL 30 1 color red 10 1 color blue 5 .......... 这样价格就是基础价格上家选择各个类型子和 商品1 size=XL color=red 的价格为100+25+5=130 考虑到很多情况下商品不是有人以的组合,而且也为了减少复杂度,可以对增量表做一下简化 id productId name price 1 1 红色L号 10 2 1 红色XXL号 40 3 1 蓝色XL号 30 这两种具体看需求,淘宝从应用角度讲,实现的是上一种,当然上一种也包容了下面的设计 大哥你行不行....用乘法 +舍入 不要用加法 维护组会死的..... 改了一下....看看这个 一般来说特性自定义是有必要的. 类型表 tid name fid 1 颜色 0 2 大小 0 3 xl 2 4 l 2 5 红 1 6 蓝 1 产品类型表 kid pid tid a3 p1 3 a4 p1 5 a5 p1 6 库存表 类别 库存 a3,a4 1001 a3,a5 0 折扣表. <script> function money( price,type,f){ var temp = f(price);if(type=="a3,a4") return temp*80%} </script> |
|
返回顶楼 | |
发表时间:2012-09-27
抛出异常的爱 写道 lavafree 写道 如果增加灵活性的话,可以考虑增量价格的设计
商品基础表: productid 商品其他字段,是否有增量字段,最低价格price 1 yes 100 增量价格表 productid type typename price 1 size L 0 1 size XL 25 1 size XXL 30 1 color red 10 1 color blue 5 .......... 这样价格就是基础价格上家选择各个类型子和 商品1 size=XL color=red 的价格为100+25+5=130 考虑到很多情况下商品不是有人以的组合,而且也为了减少复杂度,可以对增量表做一下简化 id productId name price 1 1 红色L号 10 2 1 红色XXL号 40 3 1 蓝色XL号 30 这两种具体看需求,淘宝从应用角度讲,实现的是上一种,当然上一种也包容了下面的设计 大哥你行不行....用乘法 +舍入 不要用加法 维护组会死的..... 改了一下....看看这个 一般来说特性自定义是有必要的. 类型表 tid name fid 1 颜色 0 2 大小 0 3 xl 2 4 l 2 5 红 1 6 蓝 1 产品类型表 kid pid tid a3 p1 3 a4 p1 5 a5 p1 6 库存表 类别 库存 a3,a4 1001 a3,a5 0 折扣表. <script> function money( price,type,f){ var temp = f(price);if(type=="a3,a4") return temp*80%} </script> 这个设计扩展必是考虑周到了。 但是我可以肯定的是产品只有一种特性,比如就叫做size了,之后再也不分color之类的了。 价格表里也没有使用折扣算法,而是直接存相应的价格。 挺感谢大家的,不管好坏,至少大家都说了自己的想法 |
|
返回顶楼 | |
发表时间:2012-09-27
我的一个方案 可能复杂点 欢迎拍砖
产品表 id 最低价 最高价 composite composite{ //通过json存储组合 组合表:'compite_1', 组合类型:'A', composites:[compositeId1,compositeId2,compositeId3] } 查询分两步 1查产品 2根据组合id 查组合 颜色表 id productid color 大小表 id productid size 组合类型 用于扩展 比如 A表示以【颜色 大小 组合】 B仅以【颜色组合】 可以用enum 组合类型_组合表(组合多了可以考虑按照规则分表 如产品的id 这个相对简单) id productid color size price stock 以后新的组合可以采用不同的组合类型 组合表即可 前台显示: 价格默认显示 : 最低价 颜色 大小信息选择 是组合的 然后到info json里查找库存 和 价格 后台新增: 先选择组合类型 再提供一些此组合类型相关的默认选项 让用户选择即可 自动生成组合 默认最低价 然后再改其他价格 当然为了建少组合的连表 可以考虑组合表这样 id productid color size price stock 1 1 Red L 100 1 |
|
返回顶楼 | |