(二)购物商城数据库设计-商品表设计

(二)购物商城数据库设计-商品表设计大家好,今天我们来设计一下购物商城的商品表。我们的目标是表结构能够满足下面这张图的搜索:在设计表之前,我们先来了解下商品中的一个概念:SPU和SKUSPUSPU(StandardProductUnit):标准化产品单元。是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。通俗点讲,属性值、特性相同的商品就可以称为一个SPU。SK…

大家好,又见面了,我是你们的朋友全栈君。

大家好,今天我们来设计一下购物商城的商品表。

我们的目标是表结构能够满足下面这张图的搜索:

搜索

在设计表之前,我们先来了解下商品中的两个概念:SPU和SKU

  • SPU
    SPU(Standard Product Unit):标准化产品单元。是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。通俗点讲,属性值、特性相同的商品就可以称为一个SPU。

  • SKU
    SKU=Stock Keeping Unit(库存量单位)。即库存进出计量的基本单元,可以是以件,盒,托盘等为单位。

举个例子:iPhone6是一个SPU,iPhone6 32G 白色是一个SKU,iPhone6 128G 白色是另一个SKU。

因此,不难发现,这里需要一张SPU表。

SPU

SPU表有了,这里还是以iPhone6为例,iPhone6有内存16G的,有32G的,有黑色,有白色等信息,这些信息我们称之为规格,比如内存是一种规格,颜色是一种规格。这些规格放在那里呢,放在SPU表里面自然是不合适的,因为每个SPU的规格都不一样。因此这里需要一张规格表,用来存放内存,颜色(不是存放32G,黑色,就存放“内存”,“颜色”这个值,表示这个SPU具有内存,颜色规格),然后用一张中间表,把SPU表和规格表关联起来,如图:

SPU规格

接下来需要解决的是,如何存放“32G”,“黑色”这些值呢?这些时具体规格的值,只需要新建一张规格值表即可。规格表和规格值表是一对多的关系,即一个规格有多个值,内存有32G,64G等。

规格值
到这里还是没有涉及到SKU的概念,先别急,我们再回到最开始的那张搜索表:

搜索

发现还少了品牌的概念,SPU与品牌的关系是一对一的关系,一个SPU具有一个品牌(iPhone6的品牌是苹果),这点好理解,因此只要新建一张品牌表,然后SPU表里添加一个品牌id。

品牌

至此,我们似乎已经可以通过规格搜索出大部分的商品,屏幕尺寸,网络,机身内存这三项都是规格,品牌我们也知道了。

但是,购物商城中不可能只卖手机,还会卖电脑,衣服等。这里我们衍生出另一个概念:分类。其中手机是一种分类。因此,我们要新建一张分类表,里面存放各种分类名称,然后在SPU表里面添加一个分类id,如图:

分类

现在,我们已经把SPU相关的表设计好了,现在来设计SKU相关的表。

根据SKU的定义得知,SKU是SPU的一种详细说明,因此SPU与SKU的关系是一对多的关系,即一个SPU对应多个SKU,首先我们要有一张SKU表:

SKUADD

其中SKU表中有一个spu_id。然后我们来看下SKU需要哪些字段,上面说到了SPU有规格,那SKU就落实到了具体的规格值,即具体的内存,颜色等。规格值表已经有了,因此需要建一张SKU与规格值的关联表:

SKU-规格值

这样,SKU就有具体的规格了。接下来,我们在根据实际的SKU图看下还缺少哪些东西。下面一张截图来自京东商城

sku

大部分的内容我们都有了,但还缺少几样东西,如果是C2C的商城,那应该有个店铺,还有一个增值保障。一个SKU对应一个店铺,可直接在SKU表里加一个店铺id,然后有一张独立的店铺表。

店铺

至于增值保障,肯定需要一张表来存放增值保障信息,然后它跟SKU的关系是多对多的关系,需要一张中间表来关联

增值保障

至此,商品表的核心内容已经设计得差不多了,当然还有其它内容。篇幅有限我们就不一一展开讨论了。大家有问题和意见可以在下面留言讨论。下一篇文章我们根据本篇的设计来做具体的建表,并来一次实际演练。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/151596.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python保留小数的方法

    Python保留小数的方法方法一、使用字符串格式化保留n位小数,并做四舍五入处理s=12.3445print(‘%.2f’%s)#12.34s=12.345print(‘%.2f’%s)#12.35方法二、使用round内置函数(会四舍五入)s=12.345a=round(s,2)print(a)#12.35s=12.3445a=round(s,2)print(a)#12.34方法三、使用decimal模块(四舍五入)fromdecimalimportDec

    2022年8月12日
    0
  • c++string截取字符串

    c++string截取字符串C++的string类提供了大量的字符串操作函数,提取字符串的一部分,可采用substr函数实现:头文件:#include<string>//注意没有.hstring.h是C的标准字符串函数数,c++中一般起名为ctring.而string头文件是C++的字符串头文件。函数原型:stringsubstr(intpos=0,intn)const;函数说明:参数1:pos是必填参数参数2:n是可参数,表示取多少个字符,不填表示截取到末尾该函数功能为:返回从

    2022年5月12日
    51
  • Jenkins(3)拉取git仓库代码,执行python自动化脚本[通俗易懂]

    Jenkins(3)拉取git仓库代码,执行python自动化脚本[通俗易懂]前言python自动化的脚本开发完成后需提交到git代码仓库,接下来就是用Jenkins拉取代码去构建自动化代码了新建项目打开Jenkins新建一个自由风格的项目源码管理Repository

    2022年7月29日
    3
  • 【全套完结】数字信号处理—-全套Matlab实验报告【建议保存】「建议收藏」

    目录实验一、熟悉MATLAB环境和基本信号的产生与运算实验一、熟悉MATLAB环境和基本信号的产生与运算实验一、熟悉MATLAB环境和基本信号的产生与运算

    2022年4月8日
    37
  • Java最新下载安装教程

    Java最新下载安装教程一、网络原理OSI与TCP/IP各层的结构与功能,都有哪些协议TCP建立连接的过程,为什么要三次握手?TCP、UDP协议的区别,各自的应用场景打开浏览器,输入URL地址,访问主页的过程HTTP有哪些方法?HTTP和HTTPS有什么区别?二、Java核心技术HashMap底层数据结构是什么,时间复杂度多少?JDK8中对HashMap做了怎样的优化?HashMap和TreeMap什么区别?ConcurrentHashMap的实现原理包装类的

    2022年7月7日
    28
  • loadrunner12安装教程_word入门基础教程视频

    loadrunner12安装教程_word入门基础教程视频Loadrunner安装_简单使用基础教程,包括VirtualUserGenerator、Controller、Analysis的简单使用以及对Loadrunner的介绍。

    2022年10月14日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号