MySQL数据库设计作业 ——《网上书店系统》数据库设计实验报告

数据库设计作业——《网上书店系统》数据库设计

一、功能需求

  • 普通用户:可以进行最基础的登陆操作,可浏览图书、按类别查询图书、查看 图书的详细信息,还可以注册成为会员。
  • 会员:需要填写详细信息(真实姓名、性别、手机号、地址、邮箱等),可浏览图书、按类别查询图书、查看图书的详细信息,在此基础上,还可以订购图书、生成订单、查看订单。
  • 管理员:可以浏览图书、按类别查询图书、查看图书的详细信息,需要查看订单、处理订单进行发货处理,同时可以查看、修改个人信息,更新图书信息,如增加、删除图书、更新库存量、修改商品名称、增加图书的属性列等。
  • 图书:需要管理员进行编排,按图书编号、书名、图书类型、作者、出版社、出版日期、定价、折扣、库存数量等信息分类。

二、数据库概念结构设计

1. 概念结构设计(E-R图)

概念结构设计(E-R图)

2. 逻辑结构设计(数据库表、关系模式)
  • 普通用户(账号 ,密码)
  • 会员(账号,密码,会员名,注册时间,手机号,邮箱,地址,性别,真实姓名)
  • 注册(账号) 外键:账号
  • 管理员(管理员编号,管理员密码,管理员名称,邮箱,手机号)
  • 订单(订单编号,会员账号,下单日期,订购数量,送货方式,支付方式,卖出 总价,收货地址,收货人联系方式,收货人姓名,发货日期,负责该订单的 管理员(编号))
  • 订购(账号,订单编号) 外键:账号,订单编号
  • 处理(管理员编号订单编号) 外键:管理员编号,订单编号
  • 图书(图书编号,书名,图书类型,作者,出版社,出版日期,定价,折扣,库 存数量,会员账号) 外键:会员账号
  • 订单详情(订单编号图书编号,订购数量,订购价格) 外键:订单编号,图书编号
规范化分析:
  • 普通用户关系中账号为主键,其中函数依赖有:账号—>密码
    因为在普通用户关系中不存在非主属性对码的部分函数依赖和传递函数依赖,所以普通用户关系是属于3NF
  • 会员关系中账号为主键,其中函数依赖有:账号—>密码,账号—>会员名,账号—>注册时间,账号—>手机号,账号—>邮箱,账号—>地址,账号—>性别,账号—>真实姓名
    因为在会员关系中不存在非主属性对码的部分函数依赖和传递函数依赖,所以会员关系是属于3NF
  • 管理员关系中管理员编号为主键,其中函数依赖有:管理员编号—>管理员密码,管理员编号—>管理员名称,管理员编号—>邮箱,管理员编号—>手机号
    因为在管理员关系中不存在非主属性对码的部分函数依赖和传递函数依赖,所以管理员关系是属于3NF
  • 订单关系中订单编号为主键,其中函数依赖有:订单编号—>会员账号,订单编号—>下单时间,订单编号—>订购总数,订单编号—>送货方式,订单编号—>支付方式,订单编号—>卖出总价,订单编号—>收货地址,订单编号—>收货人联系方式,订单编号—>收货人姓名,订单编号—>发货日期,订单编号—>负责该订单的管理员(编号)
    因为在订单关系中不存在非主属性对码的部分函数依赖和传递函数依赖,所以订单关系是属于3NF
  • 图书关系中图书编号为主键,其中函数依赖有:图书编号—>书名,图书编号—>图书类型,图书编号—>作者,图书编号—>出版社,图书编号—>出版日期,图书编号—>定价,图书编号—>折扣,图书编号—>库存数量
    因为在图书关系中不存在非主属性对码的部分函数依赖和传递函数依赖,所以图书关系是属于3NF
3. 建立和管理基本表
表1 会员表
属性字段名数据类型是否为空/约束条件
账号ACCOUNT_NUMBERCHAR(20)主键
密码PASSWORDVARCHAR(50)非空
地址ADDRESSVARCHAR(50)可以空
会员名MEMBER_IDVARCHAR(50)可以空
注册时间REGTIMEVARCHAR(50)可以空
手机号PHONE_NUMBERVARCHAR(50)可以空
邮箱POSTBOXVARCHAR(50)可以空
性别SEXVARCHAR(8)可以空
真实姓名NAMEVARCHAR(50)可以空
表2 管理员表
属性字段名数据类型是否为空/约束条件
管理员编号ADMINISTRATOR_IDCHAR(20)主键
管理员密码AD_CODECHAR(30)非空
管理员名称AD_NAMEVARCHAR(20)非空
邮箱E_MAILVARCHAR(50)可以空
手机号TELEPHONEVARCHAR(20)可以空
表3 订单表
属性字段名数据类型是否为空/约束条件
订单编号ORDER_IDCHAR(20)主键
会员账号NUMBERCHAR(30)非空
下单日期DATEVARCHAR(20)可以空
订购总数SUMINT非空
送货方式WAYVARCHAR(20)非空
支付方式PAYMENT_WAYVARCHAR(20)非空
卖出总价TOTAL_PRICEFLOAT可以空
收货地址SHIPPING_ADDVARCHAR(50)非空
收货人联系方式CONTACTVARCHAR(20)非空
收货人姓名CONSIGNEEVARCHAR(50)非空
发货日期ISSUANCE_DATEVARCHAR(20)可以空
负责该订单的管理员ADMINISTRATOR_IDVARCHAR(20)非空
表4 图书表
属性字段名数据类型是否为空/约束条件
图书编号BOOK_IDCHAR(20)主键
书名BOOK_NAMECHAR(30)非空
图书类型TYPEVARCHAR(20)可以空
作者AUTHORVARCHAR(20)非空
出版社PRESSVARCHAR(50)非空
出版日期PRESS_DATEVARCHAR(20)非空
定价PRICEFLOAT非空
折扣DISCOUNTFLOAT非空
库存数量STOCK_NUMINT可以空
会员账号MEM_NUMCHAR(20)非空
4. 使用SQL语句建立基本表
CREATE TABLE MEMBER
(ACCOUNT_NUMBER CHAR(20) NOT NULL,PASSWORD VARCHAR(50) NOT NULL,ADDRESS	VARCHAR(50),MEMBER_ID VARCHAR(50),REGTIME	VARCHAR(50),PHONE_NUMBER VARCHAR(50),POSTBOX	VARCHAR(50),SEX	VARCHAR(8),NAME VARCHAR(50)
)CREATE TABLE ADMINISTRATOR
(ADMINISTRATOR_ID CHAR(20) NOT NULL,AD_CODE	CHAR(30) NOT NULL,AD_NAME	VARCHAR(20) NOT NULL,E_MAIL VARCHAR(50),TELEPHONE VARCHAR(20)
)CREATE TABLE ORDER_SHOW
(ORDER_ID CHAR(20) NOT NULL,NUMBER CHAR(30) NOT NULL,DATE VARCHAR(20),SUM	INT NOT NULL,WAY	VARCHAR(20) NOT NULL,PAYMENT_WAY	VARCHAR(20) NOT NULL,TOTAL_PRICE	VARCHAR(20),SHIPPING_ADD VARCHAR(50) NOT NULL,CONTACT	VARCHAR(20) NOT NULL,CONSIGNEE VARCHAR(50) NOT NULL,ISSUANCE_DATE VARCHAR(20),ADMINISTRATOR_ID VARCHAR(20) NOT NULL
)CREATE TABLE BOOK
(BOOK_ID	CHAR(20) NOT NULL,BOOK_NAME CHAR(30) NOT NULL,TYPE VARCHAR(20),AUTHOR VARCHAR(20) NOT NULL,PRESS VARCHAR(50) NOT NULL,PRESS_DATE VARCHAR(20) NOT NULL,PRICE FLOAT NOT NULL,DISCOUNT FLOAT NOT NULL,STOCK_NUM INT,MEM_NUM CHAR(20) NOT NULL
)
5. 管理基本表
--(1) 向图书表增加“页数”列,其数据类型是整数型
ALTER TABLE BOOK ADD B_PAGE INT--(2) 将“图书表”中的“页数”数据类型改成短整型
ALTER TABLE BOOK ALTER COLUMN B_PAGE SMALLINT--(3) 增加“图书表”中“页数”取值必须大于0的约束条件
ALTER TABLE BOOK ADD CONSTRAINT CK_PAGE CHECK(B_PAGE > 0)--(4) 删除“图书表”中的页数列
ALTER TABLE BOOK DROP CONSTRAINT CK_PAGE--(5) 删除“图书表”
DROP TABLE BOOK
6. 建立和管理视图
--建立一个“图书类别”为“计算机”的视图
GO
CREATE VIEW COMPUTER AS SELECT * FROM BOOK WHERE TYPE = '计算机'
GO
7. 建立和管理索引
--在会员表上为姓名建立索引
CREATE UNIQUE INDEX MEMBER_NAME ON MEMBER(NAME)
8. 数据查询
--(1)查询“张玲”的会员信息
SELECT * FROM MEMBER WHERE NAME = '张玲'--(2)查询图书“中国通史”的价格
SELECT PRICE FROM BOOK WHERE BOOK_NAME = '中国通史'--(3)查询网上书店系统中每种数的库存数量,并按照库存数量由多到少排列
SELECT STOCK_NUM FROM BOOK ORDER BY STOCK_NUM DESC--(4)查询“陈东光”订购图书的订单情况
SELECT * FROM ORDER_SHOW WHERE CONSIGNEE = '陈东光'--(5)列出账号为“jtxia”的会员所订购的所有图书信息
SELECT * FROM BOOK WHERE MEM_NUM = 'jtxia' --(6)列出“英语初级听力(学生用书)”图书的订购情况,按照订购数量由大到小降序排列
SELECT * FROM ORDER_SHOW,BOOK WHERE ORDER_SHOW.NUMBER = MEM_NUM AND BOOK_NAME = '英语初级听力(学生用书)' ORDER BY SUM DESC--(7)查询订单数位列前三的会员信息
SELECT * FROM MEMBER WHERE NAME IN (SELECT TOP 3 NAME FROM ORDER_SHOW,MEMBER WHERE ACCOUNT_NUMBER = NUMBER GROUP BY NAME ORDER BY SUM(ORDER_ID))--(8)查询订购过“英语初级听力”,或者“高等数学”的会员账号和姓名
SELECT ACCOUNT_NUMBER,NAME FROM MEMBER,ORDER_SHOW,BOOK WHERE MEMBER.ACCOUNT_NUMBER = ORDER_SHOW.NUMBER AND ORDER_SHOW.NUMBER = BOOK.MEM_NUM AND BOOK_NAME = '英语初级听力(学生用书)' OR BOOK_NAME = '高等数学'--(9)统计会员所有订单的订购总价
SELECT SUM(TOTAL_PRICE) FROM ORDER_SHOW--(10)查询订购总价大于200的会员的账号
SELECT NUMBER FROM ORDER_SHOW,MEMBER WHERE ACCOUNT_NUMBER = NUMBER GROUP BY NUMBER HAVING SUM(TOTAL_PRICE) > 200
9. 数据更新
INSERT INTO MEMBER VALUES ('jtxia','123456','河北省廊坊市','@~@','2020-2-1','12345678912','123@qq.com','女','张玲')--(1)书店新进一种图书,即向图书表中增加一种新的图书,ISBN号为9787302164784,书名为软件工程导论(第5版),作者为张海潘,出版社为清华大学出版社,定价为35,折扣为8,图书类别为计算机,图书概况为“本书可作为高等院校软件工程课程的教材或教学参考书”,库存量为50
INSERT INTO BOOK VALUES ('9787302164784','软件工程导论(第5版)','计算机','张海潘','清华大学出版社','2014-3-8',35.0,0.80,50,'jskdb')--(2)书店价格调整,将“软件工程导论(第5版)”图书的“折扣”更新为7.5折
UPDATE BOOK SET DISCOUNT = 0.75 WHERE BOOK_NAME = '软件工程导论(第5版)'--(3)会员地址变更,将会员账号为“jtxia”的地址更新为“天津大学”
UPDATE MEMBER SET ADDRESS = '天津大学' WHERE ACCOUNT_NUMBER = 'jtxia'--(4)书店进货,将所有图书的库存量增加10
UPDATE BOOK SET STOCK_NUM = STOCK_NUM + 10--(5)活动促销,将“计算机”类图书的折扣全部减1(多打一折)
UPDATE BOOK SET DISCOUNT = DISCOUNT - 0.1 WHERE TYPE = '计算机'--(6)由于图书下架,删除图书“软件工程导论(第5版)”
DELETE FROM BOOK WHERE BOOK_NAME = '软件工程导论(第5版)'
10. 数据库维护
数据库备份

SQL Server 2008提供了4种不同的备份方式,分别是:①完整备份,备份整个数据库的所有内容,包括事务日志。②差异备份,它是完整备份的补充,差异备份只备份上次完整备份后更改的数据。③事务日志备份,事务日志备份只备份事务日志里的内容。④数据库文件和文件组备份,如果在创建数据库时,为数据库创建了多个数据库文件或文件组,可以使用该备份方法。
常见的数据库备份you两种方法:一种是利用Management Studio进行数据库备份;另一种时利用SQL语句进行备份。

  • 利用Management Studio进行数据库备份 在备份数据库之前,首先需要新建设备以用于存储备份的数据库。
    新建备份设备的步骤为:打开“对象资源管理器”,点击“服务器对象”,右击“备份设备”,选择“新建备份设备”,在打开的“备份设备”窗口中,输入备份设备的名称“网上书店系统_bak”,在“文件”路径处输入所属路径,单击确定,即可在左侧的对象资源管理器中看到新建的备份文件“网上书店系统_bal”。
    备份数据库:打开“服务器对象”,右击“网上书店系统_bak”这个新建立的备份设备,单击“备份数据库”,在打开的备份数据库窗口中,选择“网上书店系统”数据库、备份类型为“完整”、备份集名称默认为“网上书店系统-完整
    数据库 备份”,单击“确定”按钮即可看到备份数据库成功的提示对话框。
  • 使用SQL语句备份数据库
    1)在新建查询窗口中,输入下面的语句创建备份设备。 SP_ADDUMPDEVICE
    ‘disk’,’网上书店系统_bak’,’文件路径’
    2)在新建查询窗口中,输入下面的语句备份数据库。 BACKUP DATABASS
    网上书店系统 TO DISK = ‘网上书店系统_bak’
    3)单击工具栏上的“!执行(X)”按钮,可以看到消息窗口提示备份成功的消息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/38837.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是yum源?如何对其进行配置?

哈喽,大家好呀!这里是码农后端。今天来聊一聊Linux下的yum源及其配置相关的内容。简单来说,yum源就相当于一个管理软件的工具,可以想象成一个很大的仓库,里面存放着各种我们所需要的软件包及其依赖。 一、Linux下软件包…

VRPTW(MATLAB):北极海鹦优化(APO)算法求解带时间窗的车辆路径问题VRPTW(提供MATLAB代码)

详细介绍 VRPTW(MATLAB):北极海鹦优化(Arctic puffin optimization,APO)算法求解带时间窗的车辆路径问题VRPTW(提供MATLAB代码)-CSDN博客 ********************************求解结果…

电源管理芯片PMIC的安全策略

1.概述 PMIC作为系统的电源管理模块,其输入电压一般会比较高,为保证芯片自身的安全,PMIC芯片会有独立的安全域,和功能域完全隔离,拥有独立的电压和电流输入,独立的晶振模块,内部运行监控状态机…

MySQL实战-4 | 深入浅出索引(上)(下)

什么是数据库索引,索引又是如何工作的呢? 一句话简单来说,索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。一本 500 页的书,如果你想快速找到其中的某一个知识点,在不借助目录的情况下&…

试用笔记之-免费的汇通餐饮管理软件

首先下载免费的汇通餐饮管理软件: http://www.htsoft.com.cn/download/htcanyin.exe 安装后的图标 登录软件,默认没有密码 汇通餐饮管理软件主界面 汇通餐饮软件前台系统 点菜

使用 Java Swing 和 XChart 创建多种图表

在现代应用程序开发中,数据可视化是一个关键部分。本文将介绍如何使用 Java Swing 和 XChart 库创建各种类型的图表。XChart 是一个轻量级的图表库,支持多种类型的图表,非常适合在 Java 应用中进行快速的图表绘制。 1、环境配置 在开始之前&…

imx6ull/linux应用编程学习(7)在LCD上显示文字

在linux中,确实可以像裸机一样自己取模、自己写函数打点显示,但是效率很低,不能满足多文字显示,在Linux 系统中, 字体文件通常会放在/usr/share/fonts 目录下,有了字体文件之后,我们就不需要再对…

X86 +PC104+支持WinCE5.0,WinCE6.0,DOS,WinXP, QNX等操作系统,工业控制数据采集核心模块板卡定制

CPU 模块 是一款基于RDC 3306的SOM Express模块。RDC 3306这款X86架构的CPU是一款性能高、稳定性强的处理器。 它是一款灵活精巧的主板(尺寸为91.8mm68.6mm),可以灵活的运用于用户的底板,节约开发成本。模块的接插件使用插针形式…

人工智能在音乐创作中的双刃剑:创新与挑战

AI在创造还是毁掉音乐? 简介 最近一个月,轮番上线的音乐大模型,一举将素人生产音乐的门槛降到了最低,并掀起了音乐圈会不会被AI彻底颠覆的讨论。短暂的兴奋后,AI产品的版权归属于谁,创意产业要如何在AI的阴…

全网最全的TTS模型汇总,电商人、自媒体人狂喜

近日TTS语音模型在AI圈内热度不小,今天小编就来给大家做了个TTS模型汇总! GPT-SoVITS(AI 卖货主播大模型Streamer-Sales销冠用的TTS模型) 模型简介:支持英语、日语和中文,零样本文本到语音(TT…

Python UUID模块:深入理解与使用技巧

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

Atom CMS v2.0 SQL 注入漏洞(CVE-2022-25488)

前言 CVE-2022-25488 是一个发现于 Telesquare SDT-CW3B1 设备中的命令注入漏洞。这一漏洞可以被未经认证的远程攻击者利用,通过特殊构造的 HTTP 请求在设备上执行任意命令。以下是关于该漏洞的详细信息: 漏洞详细信息 漏洞编号: CVE-2022-25488影响范…

沃尔核材:价值重估

当英伟达这个曾经的GPU行业龙头,伴随AI的发展成为AI芯片架构的供应商时,他就跳出了原本行业的竞争格局,曾经还能与之一战的超威半导体被远远甩在身后,成为宇宙第一公司。 这说的就是一家公司价值的重估。今天给大家聊的也是这样一…

Python层次密度聚类算法库之HDBSCAN使用详解

概要 HDBSCAN 是一种层次密度聚类算法,它通过密度连接性来构建聚类层次结构。与传统的 K-Means 算法相比,HDBSCAN 具有以下几个显著特点: 自动确定聚类数量:HDBSCAN 能够根据数据自动确定聚类数量,不需要预先指定。 适应噪声和异常点:HDBSCAN 在聚类过程中能够很好地处理…

后端之路(集合项目)——结合案例正式搭建项目

在前面学完java后端的Maven、spring boot、Mysql、Mybatis之后,我们现在就应该集合它们开始搭建一个项目试试手了 这里我还是跟着黑马程序员的步骤来走好每一步,也给各位讲清楚怎么弄 先看一下这个图,觉得太笼统不明白的话不着急&#xff0c…

Java面试题总结

Redis篇 什么是缓存穿透 ? 怎么解决 ? 缓存穿透是指查询一个不存在的数据,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到 DB 去查询,可能导致 DB 挂掉。这种情况大概率是遭到了攻击。 解决方案有两种&…

Arthas实战(2)- OOM问题排查

一、 准备测试应用 新建一个 SpringBoot应用&#xff0c;写一段有 OOM bug 的代码&#xff1a; RestController RequestMapping public class JvmThreadController {List<TestWrapper> memoryList new ArrayList<>();GetMapping("/test")public Strin…

mov文件怎么转换成mp4格式?这四种转换方法超级好用!

mov文件怎么转换成mp4格式&#xff1f;在数字娱乐的世界中&#xff0c;你是否曾遇到过MOV格式的视频&#xff1f;也许&#xff0c;对于许多人来说&#xff0c;这并不是一个常见的格式&#xff0c;但这并非偶然&#xff0c;首先&#xff0c;我们来谈谈MOV的兼容性问题&#xff0…

使用python做飞机大战

代码地址: 点击跳转