




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据库课程设计说明书设计题目: 滨海在线书店系统设计 姓 名: 吴现利 学 号: 班 级: 11软件技术 指导教师: 张艳武 完成日期: 2014年4月28日 目 录一、系统概述11.1开发背景11.2系统环境1二、需求分析22.1功能需求22.2系统结构32.3用例分析3三、概念结构设计53.1实体属性图53.2全局E-R图9四、 逻辑结构设计10五、 物理结构设计11六、数据库实施136.1创建数据库136.2创建数据表并装载数据136.3创建视图166.4创建索引176.5创建存储过程186.6创建触发器18七、数据库运行和维护197.1安全性控制197.2完整性控制207.3并发控制2
2、07.4数据库的备份217.5数据库的恢复21八、设计总结22一、系统概述1.1开发背景2012年是中国先进文化大发展的一年,莫言成为了中国首位诺贝尔文学奖的获得者,中国也随之掀起了一股购书热潮。过去人们想要读书只能去书店买,去图书馆借,而现在的互联网时代,电子商务的出现极大的改变了消费者的观点,人们已经不需要在跑到书店买书了。如果想看一本书,只需要打开浏览器,去淘宝,当当,京东这些出名的电子商务网站上,输入上你想看的书名,各种版本的书籍尽在你的眼底。目前,我国网购人数达到2.12亿,网上购物在网民中的渗透率提高到41.5%,全年网购规模达到13000亿元,网购已经成为了人们的一种习惯,特别是
3、我们大学生之中。为了追赶当今世界电子商务的脚步,我们滨海也不能掉了队,所以现在急需开发出一款基于B/S架构的滨海在线购书系统,该系统具备完整的商城业务功能,足以满足我校广大师生购书的需求。“滨海在线书店”网站就是在此背景之下进行开发的。1.2系统环境本购书系统采用B/S架构,在windows7平台和JDK1.6环境下进行开发。服务器端采用Web开发最流行的Java语言,其中涉及到JSP、Servlet、XML等java Web开发相关技术。数据库采用Microsoft SQL Server2008,SQL Server2008是一种大中型关系型数据库,支持大量的并发访问和数据处理,具有强大的图
4、形化用户界面,为用户程序设计提供了更简洁、直观的途径,具有良好的伸缩性,可以跨越各种Windows平台运行。数据库建模工具采用了ERStudio8.0,UML建模工具采用了Trufun Plato V4。二、需求分析2.1功能需求会员功能:1) 会员注册:游客需要通过注册,填写个人信息,成为系统会员,注册成功之后才可进入系统进行购书。2) 会员登录:输入正确的登录名,密码和验证码进行登录。3) 图书管理:当会员进入在线书店系统后,在主页中显示推荐图书页面,只有四中类别可以为热点类别,热点类别中的四种推荐书籍可以在主页显示。也可选购图书,会员可以通过输入图书的关键字进行搜索,关键字可以是图书名的
5、一部分,也可以通过选择类别进行分类搜索。会员可以通过点击详细信息查看图书的所有详细信息。4) 购物管理:当会员选择购买某图书时,应该可以将对应商品的基本信息(例如书名、数量等)记录到我的购物车中,点击继续购买可以继续选购图书,点击清空购物车可以把购物车里的图书全部删除,点击结算按钮可以跳转到确认订单界面,在确认订单界面应该展现出订单的详细信息并要求会员填写自己的收货地址以方便配送。5) 个人管理:会员可以修改除了登录名以外的其他任何信息,比如电话,邮箱等。会员也可通过输入原密码和新密码进行更改密码,原密码输入正确之后修改密码成功。管理员功能:1) 类别管理:管理员可以添加一个新的图书类别,并可
6、以指定该类别是否为热点类别的图书,管理员可以通过类别关键字搜索到图书的类别编号,名称以及是否为热点类别。2) 图书管理:管理员可以通过输入书名,作者,上传图书图片等添加图书到数据库,管理员可以检索所有的图书信息,也可以通过关键字检索和类型检索,管理员可以修改或删除任意一本图书。3) 会员管理:管理员可以通过输入会员名字的关键字进行会员信息查询,并可以删除任意的会员。4) 订单管理:管理员可以查看所有的订单的所有信息,还可以查看每一个订单的具体的订单项内容,也可以删除任意一个会员的订单。5) 个人管理:管理员可以通过输入原密码和新密码进行密码修改。6) 管理员登录:输入正确的登录名,密码和验证码
7、进行登录。2.2系统结构根据系统功能分析描述,系统功能结构图如下图所示:图2.1 滨海在线书店系统结构图2.3用例分析滨海在线书店系统的分为前台(会员)和后台(管理员),从系统整体角度分析,滨海在线书店系统的用例图下图所示:图2.2 滨海在线书店系统用例图从管理员角度分析,后台功能模块的用例图如下图所示:图2.3 滨海在线书店后台(管理员)模块用例图从会员角度分析,前台功能模块的用例图如下图所示:图2.4 滨海在线书店前台(会员)模块用例图三、概念结构设计根据前面的需求分析,可以将滨海在线书店系统的数据库实体划分为会员实体、管理员实体、图书实体、图书类别实体、订单实体和订单项实体六个实体。利用
8、E-R图可以来描述滨海在线书店系统中的相关实体、属性及关系,可以达到为系统建立数据模型的目的,下面分别从局部概念模型和全局概念模型通过E-R图来建立整个项目的数据模型。3.1实体属性图图3.1 会员实体属性图图3.2 管理员实体属性图图3.3 图书类别实体属性图图3.4 图书实体属性图图3.5 订单实体属性图图3.6 订单项实体属性图3.2局部E-R图图3.7 会员-图书ER图图3.8 图书类别-图书ER图图3.9 订单-订单项ER图3.2全局E-R图通过数据库建模工具ERStudio制作的滨海在线书店系统的全局关系模式ER图如下所示:图3.10 概念模型全局ER图4、 逻辑结构设计逻辑结构设
9、计阶段的任务是将概念结构设计阶段所得到的概念模型转换为具体DBMS所能支持的数据模型(即逻辑结构),并对其进行优化。会员-图书ER图属于多对多关系,转换为关系模式如下:R1(会员编号、会员登录名、会员密码、会员姓名、会员性别、会员电话、电子邮箱、联系地址、邮政编码、注册时间)R2(图书编号、图书名称、图书作者、图书出版社、图书出版日期、图书价格、图书库存、图书图片、图书描述、图书是否推荐、图书类别编号)R3(会员编号、图书编号)图书-图书类别ER图属于多对一关系,转换为关系模式如下:R1(图书编号、图书名称、图书作者、图书出版社、图书出版日期、图书价格、图书价格、图书库存、图书图片、图书描述、
10、是否为推荐图书)R2(图书类别编号、图书类别名称、是否为热点类别)订单-订单项ER图属于多对一关系,转换为关系模式如下:R1(订单编号、下单时间、图书总价、收货人、收货人电话、收获地址、电子邮箱、邮政编码、客户留言、是否为推荐图书)R2(订单项编号、图书名称、图书数量、订单编号)5、 物理结构设计物理结构设计是为上一阶段的关系模型选取一个最适合的应用要求的物理结构,即确定存取方法和存储结构。滨海在线书店系统数据表结构如下。admin管理员表:共4个字段,如表4.1所示。表4.1 管理员表字段名数据类型约束控制字段含义说明标识列 a_id INT主键管理员编号是,IDENTITY(1,1) a_
11、loginnameVARCHAR(20)非空,唯一管理员登录名否 a_passwordVARCHAR(20)非空管理员密码否 a_nameVARCHAR(20)非空管理员姓名否customer会员表:共10个字段,如表4.2所示。表4.2 会员表字段名数据类型约束控制字段含义说明标识列 c_id INT主键会员编号是,IDENTITY(1,1) c_loginnameVARCHAR(20)非空,唯一会员登录名否 c_passwordVARCHAR(20)非空会员密码否 c_nameVARCHAR(20)非空会员姓名否 c_sexVARCHAR(2)非空,男或女会员性别否 c_telVARCHA
12、R(20)非空会员电话否 c_emailVARCHAR(50)非空电子邮箱否 c_addressVARCHAR(50)非空会员地址否 c_postVARCHAR(50)非空邮政编码否 c_registertimeDATETIME非空注册时间否type图书类别表:共3个字段,如表4.3所示。表4.3图书类别表字段名数据类型约束控制字段含义说明标识列 t_id INT主键图书类别编号是,IDENTITY(1,1) t_nameVARCHAR(20)非空,唯一图书类别名否 t_ishotBIT非空,默认为0是否为热点类别否book图书表:共11个字段,如表4.4所示。表4.4 图书表字段名数据类型约
13、束控制字段含义说明标识列 b_id INT主键图书编号是,IDENTITY(1,1) b_nameVARCHAR(40)非空,唯一图书名称否 b_authorVARCHAR(20)非空图书作者否 b_publisherVARCHAR(20)非空出版社否 b_pubdateDATE非空出版日期否 b_priceNUMERIC(7,2)非空价格否 b_stockINT非空,默认为0库存量否 b_picVARCHAR(100)图书图片的URL否 b_describeVARCHAR(200)图书介绍否 b_iscommendBIT非空,默认为0是否为推荐图书否 t_idINT外键类别编号否orders
14、订单表:共10字段,如表4.5所示。表4.5 订单表字段名数据类型约束控制字段含义说明标识列 o_idINT主键订单编号是,IDENTITY(1,1) o_timeDATETIME非空下单时间否 o_totalpriceNUMERIC(7,2)非空图书总价否 o_nameVARCHAR(20)非空收货人姓名否 o_tel VARCHAR(20)非空收货人联系电话否 o_postVARCHAR(10)非空收货人邮编否 o_address VARCHAR(100)非空收货地址否 o_emailVARCHAR(20)非空会员邮箱否 o_remarkVARCHAR(200)会员留言否 c_id INT
15、外键会员编号否orderItem订单表:共6字段,如表4.6所示。表4.6 订单表字段名数据类型约束控制字段含义说明标识列 oi_idINT主键订单项编号是,IDENTITY(1,1) oi_nameVARCHAR(20)非空图书名称否 oi_priceNUMERIC(7,2)非空图书单价否 oi_countINT非空所购图书数量否 o_id INT外键所属的订单编号否 b_idINT外键所属图书编号否六、数据库实施6.1创建数据库创建Bookshop数据库,代码如下:CREATE DATABASE bookshop ON ( NAME = bookshop_data, FILENAME =D
16、:databasebookshop.mdf, SIZE = 10, MAXSIZE = 100, FILEGROWTH = 10)LOG ON ( NAME = bookshop_log, FILENAME = D:databasebookshop.ldf, SIZE = 5, MAXSIZE = 50, FILEGROWTH = 5)6.2创建数据表并装载数据创建管理员表:admin,代码如下:CREATE TABLE admin (a_id INT PRIMARY KEY IDENTITY(1,1), - 管理员编号a_loginname VARCHAR(20) NOT NULL UNIQ
17、UE, - 管理员登录名a_password VARCHAR(20) NOT NULL, - 管理员密码a_name VARCHAR(20) NOT NULL - 管理员姓名)向admin表中插入测试数据,admin表信息如下图所示:图6.1 admin表信息创建会员表:custormer,代码如下:CREATE TABLE customer (c_id INT PRIMARY KEY IDENTITY(1,1), - 会员编号c_loginnameVARCHAR(20) NOT NULL UNIQUE, - 会员登录名c_password VARCHAR(20) NOT NULL, - 会员
18、密码c_name VARCHAR(20) NOT NULL, - 会员姓名c_sex VARCHAR(2)NOT NULL CHECK (c_sex =男 or c_sex = 女), -性别c_tel VARCHAR(20) NOT NULL, - 会员电话c_email VARCHAR(50) NOT NULL, - 电子邮箱c_address VARCHAR(50) NOT NULL, - 会员地址c_post VARCHAR(50) NOT NULL, - 邮政编码c_registertime DATETIME NOT NULL - 注册时间)向customer表中插入测试数据,cus
19、tomer表信息如下图所示:图6.2 customer表信息创建图书类别表:type,代码如下:CREATE TABLE type (t_id INT PRIMARY KEY IDENTITY(1,1), - 图书类别编号t_name VARCHAR(20) NOT NULL UNIQUE ,- 图书类别名t_ishot BIT NOT NULL DEFAULT 0- 是否热点类别)向type表中插入测试数据,type表信息如下图所示:图6.3 type表信息创建图书表:book,代码如下:CREATE TABLE book (b_id INT PRIMARY KEY IDENTITY(1,1
20、), - 图书编号b_name VARCHAR(40) NOT NULL, - 图书名称b_author VARCHAR(20)NOT NULL, - 图书作者b_publisherVARCHAR(20) NOT NULL, - 出版社b_pubdate DATE NOT NULL, - 出版日期b_price NUMERIC(7,2) NOT NULL, - 价格b_stockINT NOT NULL DEFAULT 0,- 库存量b_pic VARCHAR(100), - 图书图片(URL)b_descript VARCHAR(200), - 图书介绍b_iscommend BIT NOT
21、 NULL DEFAULT 0,- 是否是推荐图书t_idINT REFERENCES TYPE(t_id) - 图书所属类别编号)向book表中插入测试数据,book表信息如下图所示:图6.4 book表信息创建订单表:orders,代码如下:CREATE TABLE orders(o_id INT PRIMARY KEY IDENTITY(1,1),- 订单编号o_time DATETIME NOT NULL, - 下单时间o_totalprice NUMERIC(7,2) NOT NULL, - 图书总价o_name VARCHAR(20) NOT NULL, - 收货人名o_tel V
22、ARCHAR(20) NOT NULL, - 收货人电话o_post VARCHAR(10) NOT NULL,- 收货人邮编o_address VARCHAR(100)NOT NULL,- 收货地址o_email VARCHAR(20) NOT NULL, - 客户邮箱o_remark VARCHAR(200), - 客户留言c_id INT REFERENCES customer(c_id)- 客户编号)向orders表中插入测试数据,orders表信息如下图所示:图6.5 orders表信息创建订单项表:orderItem,代码如下:CREATE TABLE orderitem (oi_
23、id INT PRIMARY KEY IDENTITY(1,1),- 订单项编号oi_nameVARCHAR(20)NOT NULL, - 图书名称oi_price NUMERIC(7,2) NOT NULL,- 图书单价oi_count INT NOT NULL, - 所购图书数量o_id INTREFERENCES orders(o_id),- 所属订单编号b_idINT REFERENCES book(b_id) - 图书编号)向orderItem表中插入测试数据,orderItem表信息如下图所示:图6.6 orderItem表信息6.3创建视图将所有热点类别的图书中的推荐图书查询出来
24、,此查询涉及到book和type两张表的关联,查询结果需在用户功能模块的推荐图书页面上进行展现,在页面展现时,只需要书名,作者,图片,出版社,价格,类别这些字段信息即可,其他信息不需要,所以应该用视图来保存查询结果,创建该视图,名称为view_hotbook,代码如下:GOcreate view view_hotbook asSELECTb.b_name, b_author, b_pic, b_publisher, b_price, t_nameFROM book b INNER JOIN TYPE t ON b.t_id = t.t_id WHERE b_iscommend = 1查询vie
25、w_hotbook视图信息,如下图所示:图6.7 view_hotbook视图信息6.4创建索引索引分为聚集索引,非聚集索引和唯一索引。聚集索引的查询效率是最高的,并且聚集索引在每张表里只能有一个,在SQLServer数据库中,所有表的主键会被默认添加为聚集索引,如果将主键作为查询条件,将大大提高查询的效率。在滨海在线书店系统里,大部分查询都所需要通过主键作为查询条件,索引默认聚集索引无需修改。但是在查询图书信息时,需要对图书的名字进行模糊查询,同时也需要指定图书的查询类别,所以在book表上的b_name和b_id和t_id这三个查询条件的字段上建立聚集索引最为合适,需要先删除表中主键上的聚
26、集索引,再添加新的聚集索引,代码如下:CREATE CLUSTERED INDEX book_clustered_index ON book(b_id, b_name, t_id);在查询图书信息时,往往需要把图书的名字,出版社,作者,价格这些信息查询出来直接展现在页面上,其他信息是往往通过点击查看详细信息按钮进行查看,在需要查询的字段上建立非聚集索引同样也可以提高查询效率,代码如下:CREATE INDEX book_index ON book(b_name, b_publisher,b_name, b_price);查看该索引信息,如下图所示:图6.8 book表上的索引信息6.5创建存储
27、过程存储过程是存储在SQL Server数据库中的一种编译对象。存储结构能模块化程序设计,高效率的执行,减少网络流量,还可以作为安全机制使用。用户进行图书检索时,需要用到输入图名进行查询,当用户输入一个图书名称时,应该输出图书的相关信息,以及所属的类别信息,该需求就可以通过创建存储过程来实现,创建一个名为proc_bookinfo的存储过程,代码如下:GOCREATE PROC proc_bookinfo(b_name VARCHAR(40) ASSELECT b_name, b_author, b_publisher, b_pubdate, b_price,b_stock, b_descri
28、be, b_iscommend, t_nameFROM book b,type tWHERE b.t_id=t.t_id and b_name = b_name执行该存储过程,代码如下:Exec proc_bookinfo b_name=百年航母执行结果如下图所示: 图6.9 proc_bookinfo存储过程执行结果6.6创建触发器本系统中的Orders订单表与OrderItem是一对多的关系,一个订单包含若干个订单项,当删除订单时,该订单中的订单项应该也被删除,这种级联删除操作可以很方便的通过触发器来实现,创建一个名为orders_delete_trigger的触发器,代码如下:GOCRE
29、ATE TRIGGER orders_delete_trigger ONordersFOR DELETE AS DELETE FROM orderItem WHERE o_id in(SELECT o_id FROM DELETED)执行该触发器,删除订单号为1的订单,代码如下:DELETE FROM orders WHERE o_id = 1执行完成后,订单记录和该订单的订单项记录全部被删除,结果如下图所示:图6.10 orders_delete_trigger触发器执行结果七、数据库运行和维护7.1安全性控制 权限控制:书店管理员查询,删除及修改任何会员、图书、图书类别、订单等信息。用户只
30、允许查看及修改自己的信息和自己的订单。数据加密:本系统中Customer表中的c_password和Admin表中的a_password字段都为varchar类型,直接用varchar类型存储密码是一种非常不安全的做法,可以将两张表的password字段改为16位的二进制方式进行存储,当用户进行注册时,密码会自动转换为经过MD5算法加密后的形式,极大的增加了系统的安全性。防止SQL注入:本系统采用java语言开发,在通过JDBC连接数据库时,java对SQL注入防范给予了极大的支持,在处理数据库的DML操作时,可以使用PreparedStatement接口进行处理,有效的防止了提交表单时通过拼
31、凑SQL语句而进行的SQL注入攻击。7.2完整性控制 数据库的完整性是指始终保持数据库中的数据处在正确的状态,防止不符合语义的错误数据进入和输出,同时还要使存储在不同副本中的同一个数据保持一致,数据库的结构不受破坏,具有正确性、有效性和一致性。在构建数据库的时候可以增加一些完整性约束,例如会员性别只能为男或女,本系统还可以通过在客户端、服务器端进行双重验证,保障数据的完整性。在客户端可以使用js技术进行表单验证,如果不符合要求,则禁止用户提交数据到服务器端,例如用户注册时的验证,如下图所示:图7.1 客户端检查数据完整性在服务器端接受用户提交的数据时候,也可以进行数据校验,在本系统中,可以通过
32、java正则表达式来实现,所有数据验证通过之后,再将数据装配到数据库。7.3并发控制 在多个用户同时操作数据库时,如果不进行并发控制,则极易造成数据的不一致,例如会员想要买Java编程思想这本书,并且想要下订单,于此同时书店管理员也修改了这本书的价格,而他们又几乎在同一时间下了订单,此时用户购买图书的价格可能是未修改之前的价格,这就需要数据库事务的支持,当同时执行多条SQL语句的时候,若发生错误,所有的操作都将被回滚,防止数据不一致的情况。但很多情况下,为了提供系统并发的效率,在编写应用程序的时候并不使用数据库默认的高度事务隔离级别,而是将事务隔离级别降低,在程序里通过多线程的方式来控制并发。
33、7.4数据库的备份在SQLServer中,数据库可以备份到备份设备和备份文件中。备份类型分为完整备份、差异备份和日志备份。可以通过BACKUP DATABASE语句对数据库进行备份。代码如下:BACKUP DATABASE bookshop TO DISK = NC:Program FilesMicrosoft SQL ServerMSSQL10.MSSQLSERVERMSSQLBackupbookshop.bak WITH NOFORMAT, NOINIT, NAME = Nbookshop-完整数据库备份, SKIP, NOREWIND, NOUNLOAD, STATS = 10GO7.5
34、数据库的恢复在数据备份成功之后,一旦系统数据库发生故障或异常,可以使用数据库还原来找回备份的数据,数据库管理员应该指定合理的备份和还原策略来进行对数据库的维护操作。八、设计总结经过这次期末设计,感觉自己在数据库这方面的知识欠缺实在太多,首先是对数据库设计的各个阶段不熟悉,在写这篇设计文档之前,从开始的需求分析到最后的数据库的运行与维护每个阶段的任务都不明确,所以在做设计的时候还得先把每个阶段的任务弄明白才能进行设计,因此我在网络上查找了很多相关的资料也看了一些相关的书籍,这次模模糊糊的把每个阶段弄清楚。之前也用jsp写过几个类似这个滨海在线书店的小项目,但是从来没有重视过数据库设计这方面,一般就是根据项目的业务逻辑大致的确定有哪些表,有哪些字段,把数据库建起来直接进行程序开发了。但是随着功能写的越来越多,出现了一系列的问题,比如缺少了一些应该有的字段,或者有些表的关联关系根本没分析清楚,可能是多对多的关系,就当成一对多来做了,正所谓数据是程序的灵魂,数据都没弄对,项目自然也没法往下写了,无奈之下只能重构数据库,导致之前做的很多工作都白费了。在设计滨海在线书店系统的时候我接受了之前的教训,在开始正式编码之前我把主要精力都放在了数据库上,主要分析实体之间的关联关系,然后建立相
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年安徽高级档案职称测试题及答案
- 手术室专科理论知识考试试题及答案
- VTE防治知识考试试题(附答案)
- 化学实验室安全考试试题-及答案
- 2025年新疆特产白糖海外销售代理合作协议
- 2025年度社区医院慢性病管理服务合作协议
- 2025年度电子商务平台开发与运营一体化服务合同
- 2025高性能医疗器械绿色包装设计与市场销售联合协议
- 2025年定制化印刷品防伪解决方案合同
- 2025年大型餐饮集团中央厨房设备升级改造及维护保养合同
- 金风15兆瓦机组变流部分培训课件
- 膀胱镜检查记录
- 沈阳终止解除劳动合同证明书(三联)
- 化工装置静设备基本知识
- 电脑节能环保证书
- 美国共同基金SmartBeta布局及借鉴
- 企业劳动用工法律风险与防范
- 露天矿山危险源辨识汇总
- 2022年08月安徽省芜湖市招考大学生科技特派员岗位冲刺题(带答案)
- 国家城镇救援队伍能力建设与分级测评指南
- 口腔修复学-纤维桩-PPT课件
评论
0/150
提交评论