为什么80%的码农都做不了架构师?>>>   


表关系:
分类表 <= 商品表 <= SKU表(库存表)
分类表 <= 属性名 <= 属性值
商品表 <= 商品和属性关系表 => 属性名|属性值

业务逻辑:
1.同一商品不同SKU库存和售价不同.
2.不同类型的商品具有不同的属性名和属性值(如汽车和服饰),所以属性需要支持后期添加和维护.
3.在某个商品分类下通过属性筛选商品.
4.商家某件商品的销量统计,该件商品内几个不同SKU的销量统计.
5.更多...

分类表:
(商品分类编号, 分类名称, 父分类编号)
(1, 男装, 0)
(2, 裤子, 1)
(3, 外套, 1)
(4, 内裤, 1)
(5, 袜子, 1)商品表:
(商品编号, 商品名称, 商品分类编号, 卖家编号, SPU销量, 评论数)
(1, '裤子名', 2, 1, 0)
(2, '外套名', 3, 1, 0)
(3, '内裤名', 4, 1, 0)
(4, '袜子名', 5, 1, 0)SKU表(库存表):
(SKU编号, 商品编号, SKU属性, 价格, 库存, SKU销量)
(1, 1, [1:1,2:3], 99, 400, 0) 其中 [1:1,2:3] 表示 "颜色为黑色,尺码为X"
(2, 1, [1:1,2:4], 99, 200, 0) 其中 [1:1,2:4] 表示 "颜色为黑色,尺码为XL"
(3, 1, [1:2,2:3], 99, 300, 0) 其中 [1:2,2:3] 表示 "颜色为白色,尺码为X"
(4, 1, [1:2,2:4], 99, 100, 0) 其中 [1:2,2:4] 表示 "颜色为白色,尺码为XL"
上面只列出商品1这个分类的4个SKU.属性名:
(属性名编号, 属性名, 商品分类编号, 父属性编号)
(1, 颜色, 2, 0)
(2, 尺码, 2, 0)
(3, 品牌, 2, 0)
上面只列出裤子这个分类的3个属性名.属性值:
(属性值编号, 属性值, 属性名编号)
(1, 黑色, 1)
(2, 白色, 1)
(3, X,  2)
(4, XL, 2)
(5, 七匹狼, 3)
(6, 九牧王, 3)
上面只列出裤子这个分类的6个属性值.商品和属性关系表:
(自增编号, 商品编号, 属性名编号, 属性值编号)
(1, 1, 1, 1) 商品1颜色为黑色
(2, 1, 1, 2) 商品1颜色为白色
(3, 1, 2, 3) 商品1尺码为X
(4, 1, 2, 4) 商品1尺码为XL
上面只列出商品1的4个属性关系.商品和属性筛选表:
(商品编号, 商品具有的属性值编号)
(1, [1,2,3,4])
用SQL全文检索实现筛选.
如:
select * from 商品表
inner join 商品和属性筛选表
on 商品表.商品编号 = 商品和属性筛选表.商品编号
where 商品表.商品分类编号 = 2
and 商品和属性筛选表.商品具有的属性值编号 MATCH '1 3'
order by 商品表.评论数 DESC LIMIT 10 OFFSET 20;商品搜索表:
(商品编号, 商品标题和内容)
(1, [无需词典,二元分词])
用SQL全文检索实现搜索.

里面有这么一些表结构设计思想:
名值: id, name, value (用于实现自定义字段如属性的存储)
父子: id, pid (用于实现关系树如分类和子分类的存储)
其中"名值"的思想应该就是EAV(Entity-Attribute-Value)实体属性值模型思想.
留意过WordPress数据表的也会看到类似设计:
wp_postmeta(meta_id,post_id,meta_key,meta_value)
wp_commentmeta(meta_id,comment_id,meta_key,meta_value)
wp_usermeta(umeta_id,user_id,meta_key,meta_value)
wp_options(option_id,option_name,option_value,autoload)
"父子"存储无限极分类:
wp_term_taxonomy(term_taxonomy_id,term_id,taxonomy,parent)

上面提到的无需词典的二元分次算法示例:

<?php
function cws($str) {//找出字符串中的英文单词和数字if(preg_match_all('%[A-Za-z0-9_-]{1,}%', $str, $matches)) {$arr = $matches[0];}//以非中文(中文包括简体和繁体)进行正则分割$sections = preg_split('%[^\x{4e00}-\x{9fa5}]{1,}%u', $str);foreach($sections as $v) {//注意:foreach中多次正则匹配会降低性能switch(true) {case ($v === ''): continue; break;case (mb_strlen($v, 'UTF-8') < 3): $arr[] = $v; break;case (preg_match_all('%[\x{4e00}-\x{9fa5}]%u', $v, $matches))://前后俩俩组合,实现冗余分词.//如"中国好声音"将被分词为: 中国 国好 好声 声音$size = count($matches[0]);for($i = 0; $i <= $size-2; $i++) {$word = '';for($j = 0; $j < 2; $j++) {$word .= $matches[0][$i+$j]; //echo $i.' '.$j.' '.$matches[0][$i+$j]."\n";}$arr[] = $word; //echo "\n";}break;}}return array_unique($arr);
}

转载于:https://my.oschina.net/eechen/blog/857845

PHP商城 商品模块 数据库 表设计相关推荐

  1. 商城 商品模块 数据库 表设计

    商城 商品模块 数据库 表设计 要实现一个商城,对于商品模块中的数据库表设计不懂,主要是:相同类别的产品的产品参数相同,不同类别的不同,这里就不懂要怎么设计了,所以上网找几篇博客了解. 什么是SPU. ...

  2. 电商商城-商品模块数据库设计

    文章目录 行业概念介绍 数据库设计 调研的高Star开源作品 行业概念介绍 SPU:标准化产品单元(Standard Product Unit),是商品信息聚合的最小单位,是一组可复用标准化信息的集合 ...

  3. 商品规格可选怎么设计_商品模块数据库表解析(一)

    本文主要对商品分类.品牌管理.商品类型这三个功能的表进行解析,采用功能与表结构对照的形式.表解析只会标注一些需要理解的字段,简单字段请自行对照表注释. SpringBoot实战电商项目mall(25k ...

  4. 商品审核网页界面_商品模块数据库表解析(二)

    接上一篇文章,本文主要对编辑商品.商品评价及回复.商品操作记录这三块功能的表进行解析,采用数据库表与功能对照的形式. SpringBoot实战电商项目mall(25k+star)地址:https:// ...

  5. 商品模块数据库表解析(一)

    本文主要对商品分类.品牌管理.商品类型这三个功能的表进行解析,采用功能与表结构对照的形式.表解析只会标注一些需要理解的字段,简单字段请自行对照表注释. 商品分类 商品分类表 create table ...

  6. 美多商城之商品(商品数据库表设计)

    一.商品数据库表设计 1.1 SPU和SKU 在电商中对于商品,有两个重要的概念:SPU和SKU 1. SPU介绍      [即为商品的一个概述,一种商品的统称] SPU = Standard Pr ...

  7. 美多商城项目:商品数据库表设计、准备商品数据、首页广告、商品列表页

    一.商品数据库表设计 1.1 SPU和SKU 在电商中对于商品,有两个重要的概念:SPU和SKU 1. SPU介绍 SPU = Standard Product Unit (标准产品单位) SPU是商 ...

  8. Python项目实战 6.1 商品:商品数据库表设计

    目录 一.SPU和SKU 二.首页广告数据库表分析 三.商品信息数据库表分析 一.SPU和SKU 待更新 二.首页广告数据库表分析 待更新 三.商品信息数据库表分析 待更新

  9. 数据库表设计、 数据库分层、myslq水平拆分、oracle表分区

    数据库表设计 数据库表结构设计方法及原则(li)数据库设计的三大范式:为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式.范式是符合某一种设计要求的 ...

最新文章

  1. 请求rest接口返回中文乱码
  2. 什么是neo4j cql查询语言 cypher 密码 暗号
  3. Java项目实训报告
  4. 【干货】最早的打车App产品摇摇招车死亡背后的那些经验
  5. mysql 检查点_my05_mysql检查点简述
  6. 运维linux脚本实例,Shell脚本使用示例
  7. NPOI导出Excel2007-xlsx
  8. 4G网络建设近尾声 SDN/NFV是5G网络创新关键
  9. 中南大学 10科学计算和 MATLAB 语言 矩阵变换
  10. Java编程:查找算法——顺序查找、二分查找、插值查找、斐波那契查找
  11. 【jsp】基础知识总结
  12. php+log+iis,利用nxlog以syslog方式发送iis日志
  13. android可以设计的软件,不懂APP如何设计?送你10条Android设计原则
  14. 如何批量调节图片对比度?
  15. c++数组、结构体数组和对象数组的初始化方式
  16. 安卓开发——视频播放器
  17. 王 第潜艇三天 引用类型 继承
  18. es 切换别名_Elasticsearch之别名
  19. 单人扑克游戏:地城恶棍的Python实现(附实现代码)
  20. Docker - Docker Container及Container命令详解

热门文章

  1. 基于angularjs的单页面实例_基于AngularJs的单页面程序
  2. 百度SEO教程-利于百度推送工具实现百度快速收录
  3. 拼多多2021笔试真题集 -- 1. 多多的数字组合
  4. win10笔记本电源的高性能找不到
  5. 解决Failed to open .ini file C:\Users\xxx\.android\emu-update-last-check.ini for writing.
  6. ola2672978400 oj最短路径
  7. Error:.系统错误,错误码:80058,desc of scope.userLocation is empty[20210513 20:05:21][wxd0659441b63ab707]
  8. 假如当初知道skycc营销软件是不是比现在好
  9. 面试机器学习算法,你需要知道这18个知识点!
  10. 常见的 ChatGPT 相关错误提示及解决办法