配色: 字号:
《SQLserver数据库》课程设计范例
2023-03-15 | 阅:  转:  |  分享 
  
概述

课题简介

书店书目书种繁多,来源多样,购买者众多,图书信息、供应商信息、客户信息、销售信息庞大,不易管理。因此,很有必要创建一个,以便于对的管理。 应用对数据库系统原理的理论学习,通过上机实践的方式将理论知识与实践更好的结合起来,巩固所学知识。

数据库应用 课程实践:实践和巩固在课堂教学中学习有关知识,熟练掌握对于给定结构的数据库的创建、基本操作、程序系统的建立和调试以及系统评价。

数据库原理 软件设计实践:实践和巩固在课堂教学中学习的关于关系数据库原理的有关知识和数据库系统的建立方法,熟练掌握对于给定实际问题,为了建立一个关系数据库信息管理系统,必须得经过系统调研、需求分析、概念设计、逻辑设计、物理设计、系统调试、维护以及系统评价的一般过程,为毕业设计打下基础。运用基于E-R 模型的数据库设计方法和关系规范化理论做指导完成从系统的分析到设计直至系统的最终实现,开发管理系统,完成管理系统的全部功能。首先做好需求分析,并完成数据流图和数据字典。其次做概念分析,利用实体联系的方法将需求分析的用户需求抽象为信息结构,得到E-R 图。然后就是逻辑结构设计,将E-R 图转换为计算机系统所支持的逻辑模型)设计概念结构通常有四类方法:自顶向下,自底向上,逐渐扩张以及混合策略。本系统采用的是自底向上的方法。即首先定义全局的概念结构的框架,然后逐步细化。根据自顶向下地进行需求分析然后再自底向上地进行概念设计。E-R图综合成总体E-R图,消除各种冲突;

第四步:对总体E-R图进行优化,消除冗余数据和冗余联系;



抽象初步数据:(此处与优化后E-R图得出的实体联系属性很有可能不同)

实体:图书、供应商、客户

联系:图书订购关系、图书销售关系



图书与供应商的关系是多对一的关系;

图书与客户的关系是多对一的关系。

属性:

图书的属性:图书编号、图书名称、出版社名称、作者名称、供应商名称;

主码为图书编号



供应商的属性:供应商名称、供应商地址、电话、联系人;

主码为供应商名称



客户的属性:客户编号、姓名、性别、年龄;

主码为客户编号



图书订购关系属性:供应商名称、图书编号、订购时间、订购单价;

主码为供应商名称和图书编号



图书销售关系属性:客户编号、图书编号、销售时间、销售单价;

主码为客户编号和图书编号



分E-R图:

图书E-R图:



供应商E-R图:



客户E-R图:



初E-R图:







优化后的总E-R图:





逻辑设计阶段

逻辑设计阶段:将系统E-R模型转换为关系模式,并对给出的关系模式进行关系规范化处理(尽量满足3NF),得到系统全部的关系模式,并标明主键、外键此部分一律采用英文命名将E——R模式转换为以下关系模式address, telephone, contact) ;

主键:#supplier_name

4) customer (#cno, cname, sex, age);

主键:#cno

5) book_order(#bname, #supplier_name, #order_time, order_price, order_count);

主键: #bname, #supplier_name, #order_time

6) book_sell(#bno, #cno, sell_time, sell_price);

主键:#bno



发现这六个关系模式3N都满足。因为元组中都是不可分割的数据,且所有非主属性完全依赖其主码,且它的任何一个非主属性都不传递于任何主关键字。



用户外模式设计:

基本信息视图的建立:

1. 单本销售情况(图书编号,图书名称客户编号,客户名称,销售单价,销售时间);

2. 同种销售情况(书名,销售数量,销售金额);

3. 客户信息(客户编号,客户名称、性别,年龄,累计购书金额);

4. 供应商信息(供应商名称,地址,电话,联系人);

5. 图书订购信息(图书名称,供应商名称,订购时间,订购数量,订购单价,订购金额,出版社名称,作者名称);



物理设计阶段

物理设计阶段:为一个逻辑数据模型选取一个最适合应用环境的物理结构(存储结构与存取方法),数据库的物理设计通常分为两步:A、确定数据库的物理结构;B、对物理结构进行时间和空间效率评价。--创建小型书店管理系统

create database book_shop_management

on primary(

name=''book_shop_management'',

filename=''d:\program files\microsoft sql server\mssql.1\mssql\data\

book_shop_management.mdf'',

size=10mb,

maxsize=unlimited,

filegrowth=10%)



log on(

name=''book_shop_management_log'',

filename=''d:\program files\microsoft sql server\mssql.1\mssql\data\book_shop_management_log.ldf'',

size=1mb,

maxsize=5mb,

filegrowth=3%)

go

截图得:



对各个基本表的建立(包括了各种完整性约束)

建立表 book

--建立表book

create table book(

#bname varchar(30) primary key,

writer_name char(8),

press_name char(12))

建立表 everybook

--建立表everybook

create table everybook(

#bno char(8) primary key,

#bname varchar(30) not null

constraint fk_everybook_bname foreign key references book(#bname))

建立表 supplier

--建立表supplier

create table supplier(

#supplier_name char(12) primary key,

address varchar(50)not null,

telephone char(7)not null,

contact char(8) not null)--建立表customer

create table customer(

#cno char(8) primary key,

cname char(8)not null,

sex char(2),

age int,

constraint ck_customer_sex check (sex in(''男'',''女'')))--建立表book_order

create table book_order(

#bname varchar(30),

#supplier_name char(12),

#order_time datetime,

order_count int not null,

order_price int not null,

constraint pk_book_order primary key (#bname,#supplier_name,#order_time))

建立表 book_sell

--建立表book_sell

create table book_sell(

#bno char(8) primary key,

#cno char(8) not null,

sell_time datetime,

sell_price int)

建立视图

建立基本信息视图:

建立单本销售情况视图

--建立单本销售情况视图

create view view_单本销售情况

as

select book_sell.#bno as 图书编号,#bname as 图书名称,

book_sell.#cno as 客户编号,cname as 客户名称,

sell_time as 销售时间,sell_price as 销售单价

from book_sell,customer,everybook

where everybook.#bno=book_sell.#bno

and customer.#cno=book_sell.#cno

建立同种销售情况视图

--建立同种销售情况视图

create view view_同种销售情况

as

select 图书名称 as 书名,

count(图书编号) as 销售数量,

sum(销售单价) as 销售金额

from view_单本销售情况

group by 图书名称--建立客户信息情况

create view view_客户信息

select customer.#cno as 客户编号,

cname as 客户名称,

sex as 性别,

age as 年龄,

(select sum(sell_price) from book_sell

group by #cno) as 累计购书金额

from book_sell,customer

where book_sell.#cno=customer.#cno

建立供应商视图

--建立供应商视图

create view view_供应商信息

as

select #supplier_name as 供应商名称,

address as 地址,

telephone as 电话,

contact as 联系人

from supplier--建立订购信息视图

create view view_图书订购信息

as

select book_order.#bname as 图书名称,

#supplier_name as 供应商名称,

#order_time as 订购时间,

order_price as 订购单价,

order_count as 订购数量,

(order_priceorder_count) as 订购金额,

press_name as 出版社名称,

writer_name as 作者名称

from book,book_order

where book.#bname=book_order.#bname

建立存储过程

某种图书库存查询存储过程

create procedure sp_某种图书库存查询

--@p1为要查询的图书名称

@p1 varchar(30)

as

begin

select 订购数-销售数量as 库存

from (select sum(order_count) as 订购数,#bname as 书名

from book_order

group by #bname) as x,view_同种销售情况

where x.书名=@p1 and view_同种销售情况.书名=@p1

end

go----建立本月业绩查询存储过程

-----由于不知其它信息,此处将销售金额与营业金额等同

-----营业金额=营业额=成本+利润

create procedure sp_查询某段时间内的业绩

--@p1为起始时间,@p2为结束时间

@p1 datetime,@p2 datetime

as

begin

select sum(销售单价) as 销售金额from view_单本销售情况

where 销售时间>=@p1 and 销售时间<=@p2

end

go----建立某段时间内销售最好图书信息查询存储过程

create procedure sp_查询某段时间内销售最好的图书信息

@p1 datetime,@p2 datetime

as

begin

select #bname as 图书名称,

writer_name as 作者名称,

press_name as 出版社名称

from (select 图书名称as 书名,

count(图书编号) as 销售数量

from view_单本销售情况

where 销售时间>=@p1

and 销售时间<=@p2

group by 图书名称) as x,book

where #bname=书名

and 销售数量>=all(select count(图书编号)

from view_单本销售情况

where 销售时间>=@p1

and 销售时间<=@p2

group by 图书名称)

end

go/更新/删除)和操作时间

----建一个操作审核表

create table customer_operate

(客户编号char(8)not null,

客户名称char(8)not null,

操作方式char(4)not null,

操作时间datetime not null)

----建立相关触发器

create trigger trigger_customer_insert

on customer

for insert

as

begin

declare @p1 char(8),@p2 char(8)

set @p1=(select #cno from inserted)

set @p2=(select cname from inserted)

print''insert:''

select from inserted

insert into customer_operate values(@p1,@p2,''插入'',getdate())

end

go



create trigger trigger_customer_delete

on customer

for delete

as

begin

declare @p1 char(8),@p2 char(8)

set @p1=(select #cno from deleted)

set @p2=(select cname from deleted)

print''deleted:''

select from deleted

insert into customer_operate values(@p1,@p2,''删除'',getdate())

end

go



create trigger trigger_customer_update

on customer

for update

as

begin

declare @p1 char(8),@p2 char(8)

set @p1=(select #cno from deleted)

set @p2=(select cname from deleted)

print ''inserted:''

select from inserted

print ''deleted:''

select from deleted

insert into customer_operate values (@p1,@p2,''修改'',getdate())

end

go

建立索引(由于数据库比较小,没有必要建立索引)

实现数据库(有附件源代码和该数据库源文件)

过程功能验证

向基本表插入适量如下数据并显示基本表信息

everybook book

#bno #bname 00000001 何以笙箫默 00000002 何以笙箫默 00000003 原来你还在这里 00000004 烈火如歌 00000005 烈火如歌 00000006 烈火如歌 00000007 微微一笑很倾城

book_sell

#bno #cno Sell_time Sell_price 00000001 00000001 2013-6-16 21 00000003 00000002 2013-6-25 19 00000007 00000002 2013-7-9 20 00000004 00000003 2013-7-9 23 00000005 00000004 2013-7-19 18

customer

#cno cname sex Age 00000001 吕鹏 女 18 00000002 孙鲁鲁 女 18 00000003 王肖雨 女 19 00000004 邵丽君 女 19 Book_order

#bname #supplier_name Order_time Order_count Order_price 何以笙箫默 大旗 2013-6-10 2 12 原来你还在这里 大旗 2013-6-20 1 10 烈火如歌 红方 2013-7-2 1 10 烈火如歌 长城 2013-7-3 2 9 微微一笑很倾城 高原 2013-7-3 1 11 Suppilier

#suppiler address telephone contact 大旗 上海 1573234 王平 红方 上海 1734272 李景 长城 江苏 1564323 张艳丽 高原 郑州 1242356 殷风

注:此处插入数据应当book在everybook 之前插入数据(外键)

截图得:





视图显示基本信息

---用显示视图基本信息

select from view_单本销售情况

select from view_供应商信息

select from view_客户信息

select from view_同种销售信息

select from view_图书订购信息exec sp_某种图书库存查询''烈火如歌''

本月业绩查询

exec sp_查询某段时间内的业绩''2013-7-1'',''2013-7-31''exec sp_查询某段时间内销售最好的图书信息''2013-7-1'',''2013-7-31''

截图得:





用普通查询完成目标查询(两次查询同时显示)

订购超3次客户信息查询

---订购超次客户信息查询

select from view_客户信息

where 客户编号=any(

select #cno from book_sell

group by #cno

having count()>3)---按供应商名称查询订购信息

select from view_图书订购信息

order by 供应商名称

截图得:



注:数据检查得,确实没有订购超3次的客户。

验证触发器

--验证触发器

insert into customer values(''00000005'',''陈利'',''女'',''21'')

go

update customer

set cname=''陈丽''

where cname=''陈利''

go

delete from customer

where cname=''陈丽''

select from customer_operate

go

截图得:



总结

经过将近两个星期的努力,终于设计出了一个基本符合设计要求的数据库系统。本系统功能强大,用户界面良好,然而,学生能力有限,该系统中仍存在某些小小的缺陷。



学生经过一段时间的努力,“功夫不负有心人”如期完成了设计任务,虽然不是很完善,但是,“麻雀虽小,五脏俱全”,在这个课程设计的练习中,学生学到了很多的东西。



其中最重要的是,在这次练习中,学生了解了数据库设计的一般过程。在接受一个项目的时候,首先是进行系统分析,即分析使用的情况以及技术的可行性,有些东西是不可行的,在设计的时候就要绕过去。整体的框架要根据要求反复斟酌,切不可轻易做出决定,不然的话,一旦出错,再改数据库那就很麻烦了。



再有就是在创建数据库的过程中要注意的一些小细节了,比如说有一下几点:(1)对表建立时,应防止本允许插入重复记录(部分重复)却由于约束不当而无法正常插入。不要想当然的名一样就约束也一样;(2)每次对前文修改后都必须保存一次,同时对所有文件都进行修改,以保持数据与结构的一致性;(3)建好基本表之后插入数据适量,以验证功能。建数据库边验证边修改;(4)对于有不确定因素的应该建立存储过程进行查询。等等。



总体来说,通过这次的练习,学生的技术能力都有了一个技术层面上的提高了。





















22/22 9/8/2014





#bname Writer_name Press_name 何以笙箫默 顾漫 晋江出版社 原来你还在这里 辛夷坞 起点出版社 烈火如歌 明晓溪 晋江出版社 微微一笑很倾城 顾漫 阅读出版社







献花(0)
+1
(本文系合同范文资...原创)