1、小区物业管理数据库设计精品文档数据库应用课程设计报告题目: 小区物业管理数据库设计 专业: 班级: 学号: 姓名: 指导教师: 完成日期: 年 月 日收集于网络,如有侵权请联系管理员删除 小区物业管理数据库设计(国脉信息学院 11级1班)摘要:这个数据库是管理楼盘住户的信息,便于管理用户的信息。用数据库管理可以更高效和更清晰的看清住户的信息还有投诉,保修等信息,有利于小区的管理,每个小区 都必须应用一个小区的数据库管理系统,这个才能更好的管理。如果一个小区没有一个数据库管理的系统,小区的管理就会混乱,住户的投诉和保修就得不到解决,所以数据库您值得拥有!关键词: 数据库 级联更新、删除 触发器
2、视图目 录1概述11.1设计背景:11.2设计目的:11.3设计内容:12. 需求分析22.1 系统功能分析:22.2 数据字典22.3数据流程图:33数据库结构33.1概念模型设计(E-R图)33.2逻辑设计54 数据库物理设计(主要包括数据存储位置、存储格式;索引及索引类型。)65 数据库实施与测试(源代码及查询截图)86 总结(设计过程中遇到的问题以及解决方法;课程学习及课程设计的体会)。287. 参考文献281概述1.1设计背景:数据库基础与应用课程设计是计算机专业集中实践性环节之一,是学习完数据库系统概论课程后进行的一次全面的综合练习。1.2设计目的:在于加深对数据库基础理论和基本知
3、识的理解,掌握进行数据库开发的全过程,提高运用数据库解决实际问题的能力。1.3设计内容:进行需求分析,设计数据库的概念模型。系统基本功能:楼盘信息管理:楼盘信息的添加、编辑和查询;住户信息管理:住户信息的添加、编辑和查询;报修事项管理:报修事项的添加、编辑和查询;投诉信息管理:投诉信息的添加、编辑和查询;报表管理:输出楼盘信息、住户信息、报修信息和投诉信息。其中:(除了以下信息,也可以按需要增加属性列)楼盘信息:包括的主要数据项有:楼盘编号,楼盘名称,楼层数,面积,户型,地址住户信息:包括的主要数据项有:业主编号,姓名,性别,电话,门牌号,面积,身份证报修事项:包括的主要数据项有:报修事项编号
4、,报修名称,业主编号,维修状态,日期,受理人投诉信息:包括的主要数据项有:投诉事项编号,投诉名称,业主编号,解决状态,日期,受理人2. 需求分析2.1 系统功能分析: 楼盘信息管理:楼盘信息的添加、编辑和查询;住户信息管理:住户信息的添加、编辑和查询;报修事项管理:报修事项的添加、编辑和查询;投诉信息管理:投诉信息的添加、编辑和查询;报表管理:输出楼盘信息、住户信息、报修信息和投诉信息。2.2 数据字典数据项数据项编号数据项名称 数据类型长度 可否为空 描述1楼盘编号int 否楼盘的编号 2楼盘名称char20否楼盘的名称3楼层数int 否楼盘的层数4面积int 否房间的大小5户型char20
5、 否属于什么户型6地址char20 否所在地址7业主编号int 否业主的编号 8名字char20否业主的名字9性别char20 否业主性别10电话int 否业主电话11门牌号int 否房间门牌号12身份证char20否业主身份证13报修事项号int 否报修事项编号 14报修名称char20否报修的东西15维修状态char20 否维修的状态16日期datetime20 否受理时间17受理人char20 否管理人员18投诉事项编号int 否投诉事项编号 19投诉名称char20否投诉的东西20解决状态char20 否解决的状态数据结构:数据结构编号数据结构名数据结构定义组成1 楼盘信息表 楼盘信息
6、 楼盘编号,楼盘名称,楼层数,面积,户型,地址2 住户信息表 住户信息 业主编号,姓名,性别,电话,门牌号,面积,身份证3报修信息表 报修信息 报修事项编号,报修名称,业主编号,维修状态,日期,受理人4投诉信息表 投诉信息投诉事项编号,投诉名称,业主编号,解决状态,日期,受理人2.3数据流程图:楼盘信息管理:住户看好楼盘 填购买表 付款 管理人员把资料录入数据库保存带住户到房间及交代一些注意事项投诉事项管理:住户提出投诉 填投诉表 交给管理人员 录入数据库 工作人员来处理 工作人员上报处理投诉结果 再次录入数据库保存报修事项管理:住户申请报修 填申请表 交给管理人员 录入数据库 专门人员上门修
7、理 工作人员上报修理结果 录入数据库保存住户信息管理:住户申请修改住户信息 填住户信息表 管理人员审核审核通过录入信息到数据库保存3数据库结构3.1概念模型设计(E-R图)实体及其属性图:(1).楼盘信息表的E-R图.住户信息表的E-R图.保修信息表的E-R图.投诉信息表的E-R图(2). 实体及其联系图: 3.2逻辑设计关系模式:楼盘(楼盘编号,楼盘名称,楼层数,面积,户型,地址)住户(业主编号,姓名,性别,电话,门牌号,面积,身份证)投诉(投诉事项编号,业主编号,投诉名称,解决状态,日期,受理人)报修(报修事项编号,业主编号,报修名称,维修状态,日期,受理人)拥有(业主编号,楼盘编号)数据
8、库表的设计楼盘信息表字段名称 数据类型 可否为空 说明 楼盘编号 int 否 主键 楼盘名称 char(20)否 楼层数 int 否 面积int 否 户型 char(20) 否 地址 char(20) 否住户信息表字段名称 数据类型 可否为空 说明 业主编号 int 否 主键 姓名 char(20)否 性别 char(20) 可 电话int 否 门牌号 int 否 面积 int 否 身份证 char(20) 否投诉信息表字段名称 数据类型 可否为空 说明 投诉事项编号 int 否 主键 业主编号 char(20)否 外键 投诉名称 char(20) 否 解决状态char(20) 否默认not
9、日期 datetime 否默认当前时间 受理人 char(20) 否报修信息表字段名称 数据类型 可否为空 说明 报修事项编号 int 否 主键 业主编号 char(20)否 外键 保修名称 char(20) 否 维修状态char(20) 否默认not 日期 datetime 否默认当前时间 受理人 char(20) 否拥有信息表字段名称 数据类型 可否为空 说明 业主编号 int 否 主键 楼盘编号 int 否 4 数据库物理设计(主要包括数据存储位置、存储格式;索引及索引类型。)数据存放在E盘的根目录下,数据库存储格式为 *.mdf 日志存储格式为 *.ldf索引类型有两个:一、 唯一索引
10、 二、 聚簇索引因为主键就可以看做是一个聚簇索引,每个表都有设主键,所以不可在建聚簇索引 5 数据库实施与测试(源代码及查询截图)-创建数据库create database 小区业务管理on primary(name = 小区业务管理,filename = E:小区业务管理.mdf,size = 3mb , maxsize = 100mb,filegrowth = 10%)log on (name = 小区业务管理.ldf,filename = E:小区业务管理_log.ldf,size = 1mb , maxsize = 2mb,filegrowth = 10%)go -创建 楼盘信息表cr
11、eate table 楼盘信息表(楼盘编号 int primary key not null,楼盘名称 char(20) not null,楼层数 int not null,面积 int not null,户型 char(20) not null ,地址 char(20) not null)go-创建表 住户信息表create table 住户信息表(业主编号 int primary key not null,姓名 char(20) not null,性别 char(20) check(性别 in(男,女),电话 int not null,门牌号 int unique not null ,面积
12、 int not null,身份证 char(20) unique not null)go -创建投诉信息表create table 投诉信息表(投诉事项编号 int primary key not null,业主编号 int not null,投诉名称 char(20) not null,解决状态 char(20) default not,日期 datetime default getdate(),受理人 char(20) not null,foreign key (业主编号) references 住户信息表(业主编号)go-创建表 报修信息表create table 报修信息表(报修事项
13、编号 int primary key not null,业主编号 int not null,报修名称 char(20) not null,维修状态 char(20) default not,日期 datetime default getdate() ,受理人 char(20) not null,foreign key (业主编号) references 住户信息表(业主编号) )go-创建拥有信息表create table 拥有信息表(业主编号 int primary key not null,楼盘编号 int not null)go -编辑楼盘信息管理的操作 -信息的添加-楼盘信息的添加in
14、sert into 楼盘信息表values(1,海天,5,120,三室一厅,中山路号)insert into 楼盘信息表values(2,柠檬夏天,10,120,四室一厅,中山路号)insert into 楼盘信息表values(3,指尖刹那,9,300,四室一厅,中山路号)-住户信息的添加insert into 住户信息表values(11,林达,女,15980123,520,120,3505251992)insert into 住户信息表values(12,谢可,女,15980147,521,100,3505251993)insert into 住户信息表values(13,谢华,男,15
15、980520,522,180,3505251994)insert into 住户信息表values(14,张琳,男,15980369,523,250,3505251995)insert into 住户信息表values(15,仲夏,男,15980789,524,300,3505251996)-报修信息的添加insert into 报修信息表(报修事项编号,业主编号,报修名称,受理人)values(10,15,水管爆裂,王砖家)insert into 报修信息表(报修事项编号,业主编号,报修名称,受理人)values(11,14,电线端口安装,王砖家)insert into 报修信息表(报修事项
16、编号,业主编号,报修名称,受理人)values(12,13,大门锁坏掉,王砖家) insert into 报修信息表(报修事项编号,业主编号,报修名称,受理人)values(13,12,灯泡更换,王砖家) -投诉信息的添加insert into 投诉信息表(投诉事项编号,业主编号,投诉名称,受理人)values(100,11,墙壁裂痕,胡说)insert into 投诉信息表(投诉事项编号,业主编号,投诉名称,受理人)values(101,12,停水,胡说)insert into 投诉信息表(投诉事项编号,业主编号,投诉名称,受理人)values(102,13,周围太吵,胡说)insert i
17、nto 投诉信息表(投诉事项编号,业主编号,投诉名称,受理人)values(103,14,乱丢垃圾,胡说)-拥有信息表的添加insert into 拥有信息表values(11,1)insert into 拥有信息表values(12,2)insert into 拥有信息表values(13,2)insert into 拥有信息表values(14,2)insert into 拥有信息表values(15,3) -信息的查询select * from 楼盘信息表select * from 住户信息表select * from 报修信息表select * from 投诉信息表select * f
18、rom 拥有信息表 -信息的编辑-楼盘信息编辑 update 楼盘信息表 set 楼盘名称 = 彩虹之家where 楼盘名称 = 海天 go-住户信息的编辑update 住户信息表 set 电话 = 1314520where 电话 = 15980123 go-5.3创建视图:为提高数据库使用效率,增强数据库安全性,按如下要求设计视图:-1:业主信息视图:通过该视图可以得到住户信息,包含业主姓名,楼盘名称,门牌号,性别,电话,面积,身份证create view 业主信息视图asselect 姓名 业主姓名,楼盘名称,门牌号,性别,电话,住户信息表.面积,身份证 from 住户信息表,楼盘信息表,
19、拥有信息表where 楼盘信息表.楼盘编号 = 拥有信息表.楼盘编号 and 住户信息表.业主编号 = 拥有信息表.业主编号-2:未维修事项信息视图:报修名称,报修人,楼盘名称,门牌号,电话,保修日期,受理人。create view 未维修事项信息视图asselect 报修名称,姓名 报修人,楼盘名称,门牌号,电话,日期 保修日期,受理人 from 报修信息表,住户信息表,楼盘信息表,拥有信息表where 维修状态 != ok and 楼盘信息表.楼盘编号 = 拥有信息表.楼盘编号 and 住户信息表.业主编号 = 拥有信息表.业主编号and 报修信息表.业主编号 = 住户信息表.业主编号-3
20、.未解决投诉信息视图:create view 未解决投诉信息视图asselect 投诉名称,姓名 投诉人,楼盘名称,门牌号,电话,日期 保修日期,受理人 from 投诉信息表,住户信息表,楼盘信息表,拥有信息表where 解决状态 != OK and 楼盘信息表.楼盘编号 = 拥有信息表.楼盘编号 and 住户信息表.业主编号 = 拥有信息表.业主编号and 投诉信息表.业主编号 = 住户信息表.业主编号-5.5 创建触发器:.如利用触发器使相关连的表能实现级联更新和级联删除。-实现级联更新和级联删除-住户信息表的级联更新删除create trigger tri_Delete_Updateon
21、 住户信息表 instead of update ,deleteasbegindeclare inset char(6),delet char(6)select inset=业主编号 from inserted select delet=业主编号 from deleted if (update(业主编号) begin EXEC sp_msforeachtable ALTER TABLE ? NOCHECK CONSTRAINT ALL -禁用约束 update 报修信息表 set 业主编号=inset where 业主编号=delet update 投诉信息表 set 业主编号=inset w
22、here 业主编号=delet update 拥有信息表 set 业主编号=inset where 业主编号=delet update 住户信息表 set 业主编号= inset where 业主编号= delet EXEC sp_msforeachtable ALTER TABLE ? CHECK CONSTRAINT ALL -启用约束 end else begin delete from 报修信息表 where 业主编号=delet delete from 投诉信息表 where 业主编号=delet delete from 拥有信息表 where 业主编号=delet delete f
23、rom 住户信息表 where 业主编号=delet endend-查询结果select * from 住户信息表select * from 投诉信息表select * from 报修信息表-测试代码update 住户信息表 set 业主编号 = 520where 业主编号 = 11因为做实验是先建好触发器,在用数据测试的,且住户信息表有一个删除触发器,所以显示删除成功!delete from 住户信息表where 业主编号= 520-楼盘信息表的级联更新删除create trigger tri_楼盘on 楼盘信息表 instead of update ,deleteasbegindeclar
24、e inset char(6),delet char(6)select inset=楼盘编号 from inserted select delet=楼盘编号 from deleted if (update(楼盘编号) begin EXEC sp_msforeachtable ALTER TABLE ? NOCHECK CONSTRAINT ALL -禁用约束 update 拥有信息表 set 楼盘编号=inset where 楼盘编号=delet update 楼盘信息表 set 楼盘编号 = inset where 楼盘编号 = delet EXEC sp_msforeachtable AL
25、TER TABLE ? CHECK CONSTRAINT ALL -启用约束 end else begin delete from 拥有信息表 where 楼盘编号=delet delete from 楼盘信息表 where 楼盘编号=delet endEnd这个触发器是后面做完实验感觉不完整再添加上去的,所以这里的数据是做完试验后的数据。 -2.如当删除一条住户信息记录能够显示提示,当添加一条报修信息能够显示提示。create trigger 删除住户 on 住户信息表after deleteasprint 删除成功!gocreate trigger 添加报修 on 报修信息表after i
26、nsertasprint 添加成功!go-5.6创建存储过程: -1.创建查询某一业主信息的存储过程 -查询住户的信息存储过程create proc 查询住户信息asselect * from 住户信息表exec 查询住户信息-2.创建添加报修信息记录的存储过程 create proc 添加报修信息报修事项编号 char(20),业主编号 char(20),报修名称 char(20),受理人 char(20)asbegininsert into 报修信息表(报修事项编号,业主编号,报修名称,受理人)values(报修事项编号,业主编号,报修名称,受理人)end-使用方法 exec 添加报修信息
27、业主编号, 报修名称 , 受理人 -因为维修状态和日期默认。exec 添加报修信息 100,12,水管不来水,王砖家 -3.创建返回某个楼盘的业主人数,并设置没有指定值时,指定一个默认楼盘 -默认楼盘编号为2 create proc 业主人数 as select COUNT(*) 业主人数 from 拥有信息表 where 楼盘编号 = 2 - 4.利用存储过程和游标设计报表:-a.输出指定的楼盘名称如输入“楼盘名称,输出一张报表显示该楼盘里面的所有住户信息,如下:/*楼盘名称业主姓名 性别 电话 门牌号 面积 身份证-徐红 女 12345678 A301 105平方 12345678909
28、- */create proc 楼盘住户表楼盘名称 char(20)asprint 楼盘名称begindeclare 姓名 char(10)declare 性别 char(10)declare 电话 char(10)declare 门牌号 char(10)declare 面积 char(10)declare 身份证 char(10)declare GR cursorfor select 姓名,性别,电话,门牌号,面积,身份证 from 住户信息表where 业主编号 in (select 业主编号 from 拥有信息表 where 楼盘编号 in (select 楼盘编号 from 楼盘信息表
29、 where 楼盘名称 = 楼盘名称) open GR fetch next from GR into 姓名,性别,电话,门牌号,面积,身份证 print - print 业主姓名 + + 性别 + + 电话+ + 门牌号 + + 面积+ + 身份证 while FETCH_STATUS = 0 begin print 姓名 + 性别 + 电话+ 门牌号 + 面积+ 身份证 fetch next from GR into 姓名,性别,电话,门牌号,面积,身份证 endprint - close GR deallocate GR end go -b.设计一个存储过程,在该存储过程中建立生成报表的
30、游标,分别显示-已解决的报修事项信息和未解决的报修事项信息。-存储过程.生成报表create proc 报修情况asbegindeclare 业主编号 char(10),报修名称 char(10), 日期 char(22)declare 受理人 char(10)-已解决的报修declare BX_OK cursorforselect 业主编号,报修名称,日期,受理人 from 报修信息表where 维修状态 = okopen BX_OKfetch next from BX_OK into 业主编号,报修名称,日期,受理人print 已经解决的报修事项print -print 业主编号 + 报修
31、名称 + 日期 + 受理人 while FETCH_STATUS = 0 begin print 业主编号 + 报修名称 + 日期 + 受理人 fetch next from BX_OK into 业主编号,报修名称,日期,受理人 end print -close BX_OKdeallocate BX_OK print print -未完成报修的游标操作declare BX_NOT cursorforselect 业主编号,报修名称,日期,受理人 from 报修信息表where 维修状态 = notopen BX_NOTfetch next from BX_NOT into 业主编号,报修名称
32、,日期,受理人print 未解决的报修事项print -print 业主编号 + 报修名称 + 日期 + 受理人 while FETCH_STATUS = 0 begin print 业主编号 + 报修名称 + 日期 + 受理人 fetch next from BX_NOT into 业主编号,报修名称,日期,受理人 end print -close BX_NOTdeallocate BX_NOT end-把维修好的报修写入数据库的存储过程 方便处理维修好的数据create proc 报修完成编号 intasupdate 报修信息表 set 维修状态 = okwhere 报修事项编号 = 编号
33、go在运行报修情况存储过程看下结果:-C设计一个存储过程,利用游标,输出投诉表中第一、二行和最后一行的信息。create proc 输出asbegindeclare 业主编号 char(10),投诉名称 char(10), 日期 char(22)declare 受理人 char(10)-输出第一第二行declare TS cursorforselect top 2 业主编号,投诉名称,日期,受理人 from 投诉信息表 open TSfetch next from TS into 业主编号,投诉名称,日期,受理人print 投诉事项print -print 业主编号 + 投诉名称 + 日期 +
34、 受理人 while FETCH_STATUS = 0 begin print 业主编号 + 投诉名称 + 日期 + 受理人 fetch next from TS into 业主编号,投诉名称,日期,受理人 end close TSdeallocate TS -输出最后一项declare TS_last cursorforselect top 1 业主编号,投诉名称,日期,受理人 from 投诉信息表 order by 投诉事项编号 descopen TS_lastfetch next from TS_last into 业主编号,投诉名称,日期,受理人 while FETCH_STATUS = 0 begin print 业主编号 + 投诉名称 + 日期 + 受理人 fetch next