目录
数据库应用项目开发课程设计报告
二手房中介管理系统设计与管理
一、二手房中介管理系统需求分析
1、系统概述
2、系统功能设想
二、二手房中介管理系统概念设计
1、实体
2、 系统局部E-R图
3、系统全局E-R图
三、二手房中介管理系统的逻辑设计
1、E-R图到关系模式的转换
3、 关系模式的规范化及调整
四、二手房中介管理系统的数据库设计
1、数据库设计
2、数据表设计
3、 视图设计
4、触发器设计
5、数据库恢复
二手房中介管理系统
二十世纪,随着我国的市场经济的蓬勃发展,房价也在不断地攀升,越来越多的房地产业开发,人们会去换新的房子,就有了一些闲置的房子。然而,对于一些刚刚步入社会的大学生,自身尚未具备购买新房的能力,对于一些求学学子,更加方便的寻求学区房也成了一大问题,在外地工作求得离公司近的房子也是必不可少的,为了更加方便,二手房中介行业也就越来越受到广大群众的需要,开发二手房中介管理系统,可以方便房产中介部门管理和客户查询检索,可以让需求者得到最大的利益。要想在激烈的市场上谋取一位,必须加强内部管理,提高运营效率,二手房中介管理系统是不可缺少的信息化管理机制。综合考虑房源空间信息,开发一个坚持客户利益优先的二手房中介信息系统是非常有必要的。
二手房中介管理系统,主要包括7个模块:分别为管理员工信息、房客信息、房东信息、房屋信息、意向信息、归还信息,收费信息。这7个个模块都包括增删改查的基础功能;系统总体来说,为以下几部分:
同时,系统有房屋基本状态的试图,可以方便地查询各个房屋是否出租的状态情况,创建储存功能,可以让管理员统计出各种户型的房屋的出租数量。并且在收费信息表中创建触发器,可以将已经租出去的房屋信息表中的房屋状态从“待租”变为“已租”,同时在房屋归还信息表中创建触发器,当增加归还信息时,将房屋状态改为“待租”。
图1 二手房中介管理系统功能结构图
E-R图中的关联必须是实体之间的关联,属性不能和其他实体有关联;属性必须是不可分的数据项,即属性中不能包括其它的属性或者实体。由此分析,可以抽象得到的实体为以下7个:
实体:
属性:
图4 “归还信息—房屋信息”局部E-R图
图5“意向信息”局部E-R图
图6 “员工信息”局部E-R图
图7 全局E-R图
房东信息(房东编号,房东姓名,性别,联系号码,身份证号,记录日期)
房客信息(房客编号,房客姓名,性别,联系号码、身份证号、记录日期)
房屋归还(归还编号,归还日期)
房客退房(房客编号,归还编号,房屋编号,归还日期)
房东收房(房东编号,归还编号,房屋编号,房客编号,归还日期)
房屋信息(房屋编号,房屋名称,户型,状态,价格,面积)
意向信息(意向编号,户型,楼层编号,价格,用途,面积)
收费信息(费用编号,金额,付款日期)
员工记录(员工编号,员工姓名,付款日期,费用编号,房东编号,房客编号)
员工信息(员工编号,员工姓名,性别,联系方式,身份证号)
关系范式中的主键重复度越高,列的空间冗余越高,由于在查询过程中,如果需要查询某一特定内容,就必须连接很多表,费时费力,而且可以有效的消除异常(比如插入异常,更新异常,删除异常),而且可以将数据的组织变得更加和谐。所以我选将房东的收房,房客退房统一合并到房屋归还里,将员工记录的收费信息,合并到收费信息表里,这样在查询中,就可以更加方便快捷,也省了多个表的联立。所以我将ER图得到的关系模式调整成以下关系模式:
员工信息(员工编号,员工姓名,性别,联系方式,身份证号)
收费信息(费用编号,金额,员工编号,员工姓名,房屋编号,付款日期,房东编号,房客编号)
房东信息(房东编号,房东姓名,房屋编号,性别,联系号码,身份证号,记录日期)
房客信息(房客编号,房客姓名,性别,联系号码,身份证号,记录日期)
房屋信息(房屋编号,房屋名称,户型,面积,状态,价格,房东编号)
意向信息(意向编号,房客编号,户型,楼层编号,价格,面积)
房屋归还信息(归还编号,房屋编号,房客编号,归还日期)
创建数据库“二手房中介管理系统”如图下所示:
图8 系统数据库的建立
(1)表汇总,如表1所示
表名 |
功能说明 |
Manager |
存储员工信息 |
Charge |
存储收费信息 |
Landlord |
存储房东信息 |
Tenant |
存储房客信息 |
House |
存储房屋信息 |
Idea |
存储意向信息 |
Back |
存储归还信息 |
表1 二手房中介系统表汇总
(2)详细表设计
create table Manager(/*员工(员工编号,姓名,性别,身份证号,联系方式)*/
man_id varchar(10) primary key,
man_name varchar(20) not null,
man_sex varchar(5) check(man_sex='男' or man_sex='女'),
man_number varchar(20) not null,
man_tel varchar(20) not null,
);
表名 |
Manager |
||||
列名 |
列名说明 |
数据类型 |
长度 |
主码、外码 |
是否允许空值 |
man_id |
员工ID |
varchar |
10 |
主码 |
否 |
man_name |
员工姓名 |
varchar |
20 |
无 |
否 |
man_sex |
性别 |
varchar |
5 |
无 |
否 |
man_number |
身份证号 |
varchar |
20 |
无 |
否 |
man_tel |
联系方式 |
varchar |
20 |
无 |
否 |
表2 Manager表
create table Landlord(/*房东(房东编号,房屋编号,姓名,性别,身份证号,联系方式,日期)*/
lan_id varchar(10) primary key,
lan_name varchar(20) not null,
lan_sex varchar(5) check (lan_sex='男' or lan_sex='女'),
lan_number varchar(20) not null,
lan_tel varchar(20) not null,
hou_id varchar(10) not null,
hou_day datetime not null,
foreign key(lan_id) references House(hou_id)
);
表名 |
Landlord |
||||
列名 |
列名说明 |
数据类型 |
长度 |
主码、外码 |
是否允许空值 |
lan_id |
房东编号 |
varchar |
10 |
主码 |
否 |
lan_name |
房东姓名 |
varchar |
20 |
无 |
否 |
lan_sex |
性别 |
varchar |
5 |
无 |
否 |
lan_number |
身份证号 |
varchar |
20 |
无 |
否 |
lan_tel |
联系方式 |
varchar |
20 |
无 |
否 |
hou_id |
房屋编号 |
varchar |
10 |
外码 |
否 |
hou_day |
记录日期 |
datetime |
无 |
否 |
表3 Landlord表
create table Tenant(/*房客(房客编号,姓名,性别,身份证号,联系方式,日期)*/
ten_id varchar(10) primary key,
ten_name varchar(20) not null,
ten_sex varchar(5) check (ten_sex='男' or ten_sex='女'),
lan_number varchar(20) not null,
lan_tel varchar(20) not null,
ten_day datetime not null,
);
表名 |
Tenant |
||||
列名 |
列名说明 |
数据类型 |
长度 |
主码、外码 |
是否允许空值 |
ten_id |
房客编号 |
varchar |
10 |
主码 |
否 |
ten_name |
房客姓名 |
varchar |
20 |
无 |
否 |
ten_sex |
性别 |
varchar |
5 |
无 |
否 |
ten_number |
身份证号 |
varchar |
20 |
无 |
否 |
ten_tel |
联系方式 |
varchar |
20 |
无 |
否 |
ten_day |
记录日期 |
datetime |
无 |
否 |
表4 Tenant表
create table House(/*房屋(房屋编号,姓名,户型,状态,价格,面积,房东编号)*/
hou_id varchar(10) primary key,
hou_name varchar(20) not null,
hou_type varchar(20) not null,
hou_state varchar(20) not null,
hou_price varchar(20) not null,
hou_area varchar(20) not null,
lan_id varchar(20) not null,
foreign key(hou_id) references Landlord(lan_id)
);
表名 |
House |
||||
列名 |
列名说明 |
数据类型 |
长度 |
主码、外码 |
是否允许空值 |
hou_id |
房屋编号 |
varchar |
10 |
主码 |
否 |
hou_name |
房屋姓名 |
varchar |
20 |
无 |
否 |
hou_type |
房屋户型 |
varchar |
20 |
无 |
否 |
hou_state |
房屋状态 |
varchar |
20 |
无 |
是 |
hou_price |
价格 |
varchar |
20 |
无 |
否 |
hou_area |
面积 |
varchar |
20 |
无 |
否 |
lan_id |
房东ID |
varchar |
20 |
外码 |
否 |
表5 House表
create table Charge(/*费用(费用编号,金额,付款日期,员工编号,员工姓名,房屋编号,房东编号,房客编号)*/
ch_id varchar(10) primary key,
ch_price varchar(20) not null,
ch_day datetime not null,
man_id varchar(10) not null,
man_name varchar(20) not null,
hou_id varchar(10) not null,
lan_id varchar(10) not null,
ten_id varchar(10) not null,
foreign key(ch_id) references House(hou_id),
foreign key(ch_id) references Manager(man_id),
foreign key(ch_id) references Landlord(lan_id),
foreign key(ch_id) references Tenant(ten_id)
);
表名 |
Charge |
||||
列名 |
列名说明 |
数据类型 |
长度 |
主码、外码 |
是否允许空值 |
ch_id |
费用编号 |
varchar |
10 |
主码 |
否 |
ch_price |
金额 |
varchar |
20 |
无 |
否 |
man_id |
员工编号 |
varchar |
10 |
外码 |
否 |
man_name |
员工姓名 |
varchar |
20 |
无 |
否 |
hou_id |
房屋编号 |
varchar |
10 |
外码 |
否 |
ch_day |
付款日期 |
datetime |
无 |
否 |
|
lan_id |
房东编号 |
varchar |
10 |
外码 |
否 |
ten_id |
房客编号 |
varchar |
10 |
外码 |
否 |
表6 Charge表
create table Idea(/*意向(意向编号,房客编号,户型,楼层编号,价格,面积)*/
id_id varchar(10) primary key,
id_type varchar(20) not null,
id_floor varchar(20) not null,
id_price varchar(20) not null,
id_area varchar(20) not null,
ten_id varchar(10) not null,
foreign key(id_id) references Tenant(ten_id)
);
表名 |
Idea |
||||
列名 |
列名说明 |
数据类型 |
长度 |
主码、外码 |
是否允许空值 |
id_id |
意向ID |
varchar |
10 |
主码 |
否 |
ten_id |
房客ID |
varchar |
10 |
外码 |
否 |
id_type |
户型 |
varchar |
20 |
无 |
否 |
id_floor |
楼层编号 |
varchar |
20 |
无 |
否 |
id_price |
价格 |
varchar |
20 |
无 |
否 |
id_area |
面积 |
varchar |
20 |
无 |
否 |
表7 idea表
create table Back(/*归还(房屋编号,房客编号,归还编号,归还日期)*/
ba_id varchar(10) primary key,
lan_id varchar(10) not null,
ten_id varchar(10) not null,
ba_day datetime not null,
);
表名 |
Back |
||||
列名 |
列名说明 |
数据类型 |
长度 |
主码、外码 |
是否允许空值 |
lan_id |
房东ID |
varchar |
10 |
无 |
否 |
ten_id |
房客ID |
varchar |
10 |
无 |
否 |
ba_day |
归还日期 |
datetime |
无 |
否 |
|
ba_id |
归还编号 |
varchar |
20 |
主码 |
否 |
表8 back表
视图名 |
功能说明 |
House_View |
查询当前房屋编号、房东以及状态信息 |
Money_View |
租房屋编号以及收费信息 |
Home_View |
查询系统所有二手房 |
表9 视图汇总表
create view House_View (房屋编号,房东编号,房屋状态)
as
select House.hou_id,Landlord.lan_id,House.hou_state
from House,Landlord
where Landlord.lan_id =House.hou_id
Go
图9 House_View视图查询
列名 |
列名说明 |
房屋编号 |
所租房子 |
房东编号 |
房屋所属人 |
房屋状态 |
房屋当前是“待租”还是“已租” |
表10 House_View视图
create view Money_View (房屋编号,房客编号,收费信息)
as
select House.hou_id,Landlord.lan_id,Tenant.ten_id
from House,Landlord ,Tenant
where Landlord.lan_id =House.hou_id
Go
图10 Money_View视图查询
列名 |
列名说明 |
房屋编号 |
所租房子 |
房客编号 |
租客 |
收费信息 |
房子当前的费用 |
表11 House_View视图
create view home_View(房型,状态,面积)
as
select House.hou_type,House.hou_state,House.hou_area
from House
go
图11 home_View视图查询
列名 |
列名说明 |
房型 |
房子类型 |
状态 |
当前市场情况 |
面积 |
房子面积 |
表12 home_View视图
(1)创建存储过程统计各种户型的房屋的出租数量
create procedure 统计出租数量
as
select hou_type,hou_state,count(hou_id) as 统计
from House
where hou_state='已租'
group by hou_type,hou_state
declare @return_value int
exec @return_value=统计出租数量
select 'Rrturn Value'=@return_value
Go
create TRIGGER 修改房屋状态
on Charge
after insert
as
BEGIN
update House set hou_state='已租'
where hou_id=(select hou_id from inserted)
SET NOCOUNT ON;
select *from inserted
select *from House
END
触发器名称:修改房屋状态
触发器作用:当房屋被租出时,修改房屋状态为“已租”(如下图所示)
图11
go
CREATE TRIGGER 归还状态
on Back
after insert
as
begin
update House set hou_state='待租'
where hou_id=(select hou_id from inserted)
SET NOCOUNT ON;
select *from inserted
select *from House
END
触发器名称:归还状态
触发器作用:当房屋被归还时,修改房屋状态为“待租”(如下图所示)
图12
数据库的备份:
图10
还原数据库:
图11