数据库原理与应用 第 14 章 · 第三节
课程 › 第 14 章 › 第三节 供应商和商品供应、分类、订单物流和地址用户和联系表 版式
第 14 章 数据库物理结构设计、实施和运行维护 · 第三节

案例:十张表的物理结构

为电子商务系统的 10 个关系模式确定字段名、类型、长度和约束
本 节 知 识 点
  1. 08供应商表与商品表
  2. 09供应表、分类表与订单表
  3. 10物流表与地址表
  4. 11用户表、属于表与包含表
08
第 14 章 · 第三节 · 课件第 14、15 页合并重做

供应商表与商品表

编号用定长字符串,名称和概述用变长字符串。

14.1 数据库物理结构设计课件第 14、15 页合并

案例:供应商表与商品表

第 13 章最后得到 10 个关系模式。为了便于在 MySQL 中操作,表名和字段名都用英文。

表 14-1 供应商表 Supplier
字段名描述类型约束
supid供应商编号char(5)主码
supname供应商名称varchar(40)非空
email电子邮箱varchar(40)
telephone联系方式char(11)
  • 编号前 2 位表示省,后 3 位是序号,例如 01001,一个省最多 1000 家
  • 联系方式通常为 11 位
表 14-2 商品表 Commodity
字段名描述类型约束
commodityid商品编号char(11)主码
commodityname商品名varchar(40)非空
manufacturer生产厂家varchar(40)
storagetime入库时间datetime
summary概述varchar(500)
thumbnail缩略图varchar(100)
  • 名称、厂家、概述长短不一,用变长字符串
  • 入库时间要精确到秒
  • 缩略图只存图片的路径

试一试编号的位数够不够用

编号
类型编法最多能编

实 验

实验 2-1 供应商表和商品表

09
第 14 章 · 第三节 · 课件第 16、17 页合并重做

供应表、分类表与订单表

金额用 decimal(9,2),订单表名要加反引号。

14.1 数据库物理结构设计课件第 16、17 页合并

案例:供应表、分类表与订单表

表 14-3 供应表 Supply
字段名描述类型约束
supid供应商编号char(5)主码
commodityid商品编号char(11)主码
supplytime供应时间date非空
supplyprice供应单价decimal(9,2)非空
supplynumber供应数量int非空
  • 两个编号合起来作主码
  • 单价是金额,用 decimal(9,2),范围是 -9999999.99 到 9999999.99
表 14-4 分类表 Type
字段名描述类型约束
typeid分类编号char(2)主码
typename分类名称char(10)非空
typedetail分类概述varchar(50)
表 14-5 订单表 Order
字段名描述类型约束
orderid订单编号char(17)主码
committime提交时间datetime非空
orderstate订单状态char(6)非空
addressid地址编号char(10)外码
ORDER 是 SQL 的保留字。订单表名为 Order,建表和查询时都要写成 `Order`,用反引号括起来。

练一练

decimal(9,2) 中的 9 和 2 分别表示什么?
  1. A整数 9 位,小数 2 位
  2. B一共 9 位数字,其中 2 位是小数
  3. C占 9 个字节,保留 2 位小数
答案 B

9 是总位数,2 是小数位数,整数部分最多 7 位,所以最大值是 9999999.99。

实 验

实验 1-2 DECIMAL(9,2) 的范围

10
第 14 章 · 第三节 · 课件第 18 页重做

物流表与地址表

地址表的用户编号和物流表的订单编号都是外码。

14.1 数据库物理结构设计课件第 18 页重做

案例:物流表与地址表

表 14-6 物流表 Logistics
字段名描述类型约束
logisticsid物流编号char(3)主码
logisticsname物流公司char(10)非空
logisticstel公司电话char(11)
expressid快递单号char(14)非空
orderid订单编号char(17)外码
  • orderid 把物流信息和订单联系起来,一个订单可以有多条物流信息
表 14-7 地址表 Address
字段名描述类型约束
addressid地址编号char(10)主码
person联系人char(4)非空
sex性别char(2)
telephone手机char(11)非空
email电子邮箱varchar(40)
country国家char(10)
province省char(10)
city市char(10)
street街道char(20)
customerid用户编号int外码
物流编号 char(3) 最多只能编 1000 个,而订单编号有 17 位,物流编号应当加长。联系人 char(4) 只能放 4 个字,名字较长的联系人放不下。

想一想

物流编号和联系人的长度,你会改成多少?

实 验

实验 2-3 地址表、订单表、物流表

11
第 14 章 · 第三节 · 课件第 19、20 页合并重做

用户表、属于表与包含表

用户编号自增,两张联系表的编号既是主码又是外码。

14.1 数据库物理结构设计课件第 19、20 页合并

案例:用户表、属于表与包含表

表 14-8 用户表 Customer
字段名描述类型约束
customerid用户编号int主码
cusname登录名char(20)非空
cuspassword登录密码varchar(64)非空
cusemail登录邮箱varchar(40)
cusauthority用户权限tinyint
registime注册时间datetime
logtime上次登录datetime
  • 用户编号由 MySQL 自动增长
  • 用户权限取 1 或 2,1 表示采购用户,2 表示销售用户
表 14-9 属于表 Classification
字段名描述类型约束
typeid分类编号char(2)主码
commodityid商品编号char(11)主码
表 14-10 包含表 Contain
字段名描述类型约束
orderid订单编号char(17)主码
commodityid商品编号char(11)主码
saleprice销售单价decimal(9,2)
salenumber销售数量int
  • 属于表和包含表的两个编号合起来作主码,又分别是外码

重 点

上一章的联系到这一步都成了表,联系的两端用外码表示。

实 验

实验 2-2 分类表和用户表

实 验

实验 2-4 三张联系表

实 验

实验 2-5 核对表和外码

保山学院·人工智能教研室·曹鼎鼎