一、需求概述
随着信息化的发展,计算机网络走进了人们的生活,人们的生活变得越来越方便。网络购物的兴起方便了人们的生活,网上书店可以让人更加便捷、足不出户地买到心仪的书籍。此外,网上购书减少了许多中间销售代理,价格会比实体店更低。同时,网上书店是信息化购物对商家来说大大降低了劳力的消耗。
(1)该系统中用户可分为管理员和客户两类;
(2)管理员可以向系统添加图书信息,图书信息包括编号,名称,作者,价格,出版社,折扣,所属图书类别(一本书只能属于一种类别,一个类别可以包含多本书),可对图书信息进行修改;
(3)客户注册时需输入客户昵称、邮箱、电话、性别等信息,客户可以浏览图书信息,可以订购图书(一个客户一次可以订购多本图书,一本图书也可以被多个客户订购),订购完成后客户可以查看订单信息,订单信息包括订购的图书,数量,订购日期,发货日期等;
(4)管理员可以对客户信息和订单信息进行管理。
三、关系模型设计
3.1、关系模型设计
将E-R图转化为关系模式(下划线为主键,下划线加斜体为外键)
客户(客户编号,姓名,地址,联系电话)
操作员(编号,用户名,密码,角色)
图书类别(类别编号,类别名称)
图书(图书编号,类别编号,图书名称,作者,出版社,进价,库存数量)
订单(订单号,客户编号,下单时间,支付时间,支付方式,金额,订单状态)
订单详情(流水id,订单号,图书编号,数量,售价,折扣)
设计表结构
(1)操作员表tb user
列名 | 说明 | 数据类型 | 约束 |
U_Id | 用户id | int | 主码(自增字段) |
U_Name | 用户名 | varchar(10) | not null |
U_Password | 密码 | varchar(30) | Not null |
U_Role | 角色 | Varchar(10) | 管理员,销售员,库管 |
(2)图书类型信息表tb type
列名 | 说明 | 数据类型 | 约束 |
T_Id | 图书类型编号 | int | 主码(自增字段) |
T_Name | 类别名称 | varchar(10) | not null |
(3)客户信息表tb customer
列名 | 说明 | 数据类型 | 约束 |
C_Id | 客户编号 | Varchar(20) | 主码 |
C_Name | 客户名称 | varchar(20) | not null |
C_Adress | 收获地址 | varchar(80) | not null |
C_Tel | 联系电话 | varchar(20) | not null |
(4)图书信息表tb book
列名 | 说明 | 数据类型 | 约束 |
B_Isbn | 图书编号 | Varchar(30) | 主码 |
B_Name | 图书名称 | varchar(30) | not null |
B_Author | 作者 | varchar(10) | not null |
B_Price | 进价 | float | not null |
B_Publish | 出版社 | varchar(20) | |
B_stocknum | 库存数量 | int | Default 0 |
T_Id | 图书类别编号 | int | not null,外键 |
(5)订单信息表tb order
列名 | 说明 | 数据类型 | 约束 |
O_Id | 订单号 | Int | 主码,自增id |
C_Id | 客户编号 | Varchar(20) | not null,外键 |
O_date | 下单时间 | Datetime | not null |
O_paydate | 支付时间 | Datetime | |
O_paytype | 支付方式 | varchar(10) | |
O_paysum | 付款金额 | float | |
O_state | 发货状态 | Int | 0下单,1支付,2取消,3发货,4退货 |
(6)订单详细信息表tb orderdetail
列名 | 说明 | 数据类型 | 约束 |
Id | 流水号 | id | 主码,自增id |
O_Id | 订单号 | varchar(20) | not null,外键 |
B_Isbn | 图书编号 | Varchar(30) | not null |
O_count | 数量 | Int | not null |
O_discount | 折扣 | float | 默认1,不打折 |
3.2、关系间联系设计
实体完整性:操作员表以用户id作为主键,图书类型信息表以类别编号作为主键,客户信息表以客户编号作为主键,图书信息表以图书编号作为主键。订单信息表以订单编号作为主键,订单详细信息表以自增的id作为主键。
参照完整性设计:图书信息表中的图书类别编号作为外键,参照图书类别表的主键。订单表的客户编号作为外键,参照客户表的主键,订单详情表的订单号作为外键,参照订单表的主键,订单详情表的图书编号作为外键,参照图书信息表的主键。
用户定义的完整性:每个表都相应的定义了合理的非空约束和默认值约束。
四、创建数据库
4.1、创建数据库
CREATE DATABASE booksell DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
六、问题解决及方法
问题1:创建表时,必须先创建无外键依赖的表,再创建有外键依赖的表,否则,外键依赖的表还不存在时,无法创建有外键依赖的表。
问题2:字符串长度应留够足够的长度。再此次作业中,出现了在插入数据时字符串长度不够的问题,又返回去修改表结构中字段的长度。教训是:如果存储的是字符类型数据,应该尽量使用varchar类型,并设置足够的长度,此类型是可变长度类型,会根据实际存储的字符分配空间,并不会提前分配空间,不会造成资源的浪费。
问题3:插入数据时应先插入无外键依赖的数据,再插入有外键依赖的数据。例如,必须先插入图书类型表的数据,再插入图书信息表的数据,否则,在插入图书数据时,T_Id依赖图书类型数据还不存在时则会报错,无法插入。
数据库设计定制、代做、交流学习:数据魔方99的个人空间-数据魔方99个人主页-哔哩哔哩视频