假设你是一家百货公司电脑部的开发人员,某天老板要求你为公司开发一套网上电子商务平台,该百货公司有数千种商品出售,不过目前仅打算先在网上销售数十种方便运输的商品,当然,以后可能会陆续在该电子商务平台上增加新的商品出售。现在开始进行该平台数据库的商品信息表的设计。每种出售的商品都会有相同的属性,如商品编号,商品名称,商品所属类别,相关信息,供货厂商,内含件数,库存,进货价,销售价,优惠价。你很快就设计出4个表:商品类型表(Wares_type),供货厂商表(Wares_provider),商品信息表(Wares_info):

商品类型表(Wares_type)
名称     类型    约束条件                       说明
type_id      int        无重复                     类别标识,主键
type_name  char(50)    不允许为空                   类型名称,不允许重复
type_father   int         不允许为空                   该类别的父类别标识,如果是顶节点的话设定为某个唯一值
type_layer    char(6)     限定3层,初始值为000000       类别的先序遍历,主要为减少检索数据库的次数

供货厂商表(Wares_provider)
名称      类型     约束条件                       说明
provider_id   int        无重复                     供货商标识,主键
provider_name char(100)   不允许为空                   供货商名称

商品信息表(Wares_info)
名称      类型    约束条件         说明
wares_id       int       无重复        商品标识,主键
wares_name char(100)  不允许为空     商品名称
wares_type  int        不允许为空  商品类型标识,和Wares_type.type_id关联
wares_info     char(200)  允许为空         相关信息
provider       int        不允许为空      供货厂商标识,和Wares_provider.provider_id关联
setnum         int        初始值为1       内含件数,默认为1
stock          int        初始值为0       库存,默认为0
buy_price      money      不允许为空      进货价
sell_price     money      不允许为空      销售价
discount       money      不允许为空       优惠价

  你拿着这3个表给老板检查,老板希望能够再添加一个商品图片的字段,不过只有一部分商品有图片。OK,你在商品信息表(Wares_info)中增加了一个haspic的BOOL型字段,然后再建了一个新表——商品图片表(Wares_pic):

商品图片表(Wares_pic)
名称      类型    约束条件                       说明
pic_id        int        无重复                       商品图片标识,主键
wares_id      int         不允许为空                     所属商品标识,和Wares_info.wares_id关联
pic_address  char(200)   不允许为空      图片存放路径

  程序开发完成后,完全满足老板目前的要求,于是正式启用。一段时间后,老板打算在这套平台上推出新的商品销售,其中,某类商品全部都需添加“长度”的属性。第一轮折腾来了……当然,你按照添加商品图片表的老方法,在商品信息表(Wares_info)中增加了一个haslength的BOOL型字段,又建了一个新表——商品长度表(Wares_length):

商品长度表(Wares_length)
名称      类型    约束条件                       说明
length_id     int        无重复                       商品图片标识,主键
wares_id      int         不允许为空                     所属商品标识,和Wares_info.wares_id关联
length       char(20)    不允许为空     商品长度说明

  刚刚改完没多久,老板又打算上一批新的商品,这次某类商品全部需要添加“宽度”的属性。你咬了咬牙,又照方抓药,添加了商品宽度表(Wares_width)。又过了一段时间,老板新上的商品中有一些需要添加“高度”的属性,你是不是开始觉得你所设计的数据库按照这种方式增长下去,很快就能变成一个迷宫呢?那么,有没有什么办法遏制这种不可预见性,但却类似重复的数据库膨胀呢?我在阅读《敏捷软件开发:原则、模式与实践》中发现作者举过类似的例子:7.3 “Copy”程序。其中,我非常赞同敏捷软件开发这个观点:在最初几乎不进行预先设计,但是一旦需求发生变化,此时作为一名追求卓越的程序员,应该从头审查整个架构设计,在此次修改中设计出能够满足日后类似修改的系统架构。下面是我在需要添加“长度”的属性时所提供的修改方案:

  去掉商品信息表(Wares_info)中的haspic字段,添加商品额外属性表(Wares_ex_property)和商品额外信息表(Wares_ex_info)2个表来完成添加新属性的功能。

商品额外属性表(Wares_ex_property)
名称      类型    约束条件                       说明
ex_pid        int        无重复                       商品额外属性标识,主键
p_name        char(20)    不允许为空                     额外属性名称

商品额外信息表(Wares_ex_info)
名称        类型    约束条件                       说明
ex_iid            int        无重复                       商品额外信息标识,主键
wares_id          int         不允许为空                     所属商品标识,和Wares_info.wares_id关联
property_id     int         不允许为空      商品额外属性标识,和Wares_ex_property.ex_pid关联
property_value  char(200)   不允许为空                     商品额外属性值

在商品额外属性表(Wares_ex_property)中添加2条记录:
ex_pid       p_name
1                商品图片
2                商品长度

  再在整个电子商务平台的后台管理功能中追加一项商品额外属性管理的功能,以后添加新的商品时出现新的属性,只需利用该功能往商品额外属性表(Wares_ex_property)中添加一条记录即可。不要害怕变化,被第一颗子弹击中并不是坏事,坏的是被相同轨道飞来的第二颗、第三颗子弹击中。第一颗子弹来得越早,所受的伤越重,之后的抵抗力也越强8)

【数据库】商品信息表的设计相关推荐

  1. Mysql 设计超市经营管理系统,包括商品信息表(goods) 和 商品类型表(goodstype)

    互联网技术学院周测机试题(一) 一  需求分析 为进一步完善连锁超市经营管理,提高管理效率,减少管理成本,决定开发一套商品管理系统,用于日常的管理.本系统分为商品管理.员工管理.店铺管理,库存管理等功 ...

  2. 订单表的字段类型 mysql_Mysql数据库下订单表如何设计?

    Mysql数据库下订单表如何设计 商品表和订单表 . 通过一个表来关联. 那删除了商品,相关联的订单表如何显示出这个已经删除的商品 订单表需要冗余商品名.商品编号.价格等基本信息. 不能只保存一个商品 ...

  3. 基于ssm的超市商品信息管理系统的设计与实现

    基于ssm的超市商品信息管理系统的设计与实现 源码获取:https://www.bilibili.com/video/BV1Ne4y1g7dC/ 超市商品信息管理系统是商业信息管理的重要部分,面对大量 ...

  4. mysql数据库实验3查询_MySQL数据库实验:任务三 数据库的单表查询设计

    任务三 数据库的单表查询设计 文章目录任务三 数据库的单表查询设计[实训目的与要求][实训原理][实训步骤]一.简单查询二.按条件查询1.比较大小查询2.带in关键字的查询(确定集合)3.带BETWE ...

  5. MySQL数据库实验:任务三 数据库的单表查询设计

    任务三 数据库的单表查询设计 文章目录 任务三 数据库的单表查询设计 [实训目的与要求] [实训原理] [实训步骤] 一.简单查询 二.按条件查询 1.比较大小查询 2.带in关键字的查询(确定集合) ...

  6. mysql 性别以女生升序_MySQL数据库实验:任务三 数据库的单表查询设计

    任务三 数据库的单表查询设计 文章目录 任务三 数据库的单表查询设计 [实训目的与要求] [实训原理] [实训步骤] 一.简单查询 二.按条件查询 1.比较大小查询 2.带in关键字的查询(确定集合) ...

  7. 03、订单商品信息表.sql

    -----订单商品信息表BDM层 create database if not exists bdm; create external table if not exists bdm.itcast_b ...

  8. 数据库中用户登录注册用户信息表怎么设计如何设计

    用户登录 站内登录:用户信息+密码的验证形式: 用户名+密码, 手机+密码, 站外授权:第三方登录, 其实它也是用户信息+密码的形式, 用户信息即第三方系统中的ID(第三方登录一定会给一个在他们系统中 ...

  9. MySQL数据库约束,表的设计

    Author: 老九 个人博客:老九的CSDN博客 ?? 个人名言:不可控之事 乐观面对 ?? 系列专栏:MySQL通关系列 文章目录 数据库约束 not null unique default pr ...

最新文章

  1. 前端html继承的方式,好程序员web前端教程之JS继承实现方式解析
  2. SQL SERVER 2008的SQLCMD模式
  3. 光耦的CTR(Current Transfer Ratio)值概念及计算方法
  4. 【Transformer】SOFT: Softmax-free Transformer with Linear Complexity
  5. Apollo进阶课程 ① | 带你纵览无人车
  6. 那些年,在nodejs上踩过的坑
  7. 互联网人理想假期VS现实假期
  8. python计算while循环次数_python-----运算符及while循环
  9. xStream:Security framework of XStream not initialized, XStream is probably vulnerable.
  10. Linux目录详细说明
  11. 《大道至简》的幕后故事(2):“愚公移山记”人物篇
  12. 判断给定的IP地址是否是内网IP
  13. php前台切图,php网页切图/js切图
  14. spriteKit 笔记三 —— Drog 精灵
  15. matlab 矩阵最大值的求法
  16. 转【测试基础】测试计划如何编写
  17. Animate.css动画库的使用操作
  18. 如何让C盘可用空间变大
  19. 学到生无可恋之 Redis(下)
  20. YOLOv4论文翻译

热门文章

  1. 光学知识之双折射现象解析
  2. 【word文档小标题】编号格式
  3. 数学 HDU 1290 献给杭电五十周年校庆的礼物
  4. git拉取代码报错:Unable to negotiate with xxx port xxx: no matching host key type found
  5. 初级职称 英语和计算机,初级经济师需要考职称英语和计算机考试吗
  6. java开发mac pro_以数据库为核心APP开发平台
  7. 在react工程中使用antd组件时,组件显示语言英文切换的方式
  8. Linux下NFS服务器的配置 (二)
  9. Karatsuba乘法--实现大数相乘
  10. JVM垃圾回收中新生代老生代的问题