房屋中介管理系统

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liuruiqun/article/details/52063734

房屋中介公司需要对日常工作中涉及到的房屋、房主和租房顾客等各类数据进行有效地管理,以实现业务的自动化,提高运行效率的同时也能够降低人力成本。本设计主要针对房屋中介公司建立一个数据库应用系统。


1 需求分析

房屋中间管理系统主要的是:

  • (1)房主能够发布房屋信息,并能够对房屋信息进行修改和删除;
  • (2)租房顾客能够查询房屋信息,请求看房,并确定租房完成租房交易。



2 概念设计及数据建模

根据需求分析,进一步实现数据库的概念设计和数据建模。


2.1 实体集与联系


实体集包括:房主、房屋和租房顾客。其中房主的属性主要有房主编号、姓名、登录密码、性别、电话号码,家庭住址,还有个人信息的建立时间和更新时间。房屋的属性包括房屋编号、房屋地点、面积、户型、照片、价格、状态以及房屋信息的建立和更新时间。租房者的属性有租房者编号、姓名、登录密码、性别、电话号码、职业和个人信息的建立与更新时间。
根据分析,能够确定的实体型为:

  • 房主(房主编号,用户名,密码,性别,电话号码,家庭住址,记录创建时间,记录更新时间);
  • 房屋(房屋编号,房屋地点,面积,户型,照片,价格,出租状态,记录创建时间,记录更新时间)
  • 租房者(租房者编号,姓名,密码,性别,电话号码,职业,记录创建时间,记录更新时间)

实体集之间的联系包括:

  • 一个房主能够拥有多个房屋,一个房屋只能属于一个房主;房主能够对未出租的房租进行出租。
  • 一个租房者能够租用多个房屋,一个房屋也能够租用给多个租房者。
  • 一个房主能联系多个租房者看房;租房者也能联系多个房主看房。


2.2 建立信息模型

根据之前确定的实体集、联系和实体集之间联系的基数,构造ER模型。



3 逻辑设计及物理设计


3.1 关系模式


E-R图转换成关系模式如下(其中,主码用下划直线表示,外码用下划波浪线表示):
(1)房主关系
房主编号,用户名,密码,性别,电话号码,家庭住址,记录创建时间,记录更新时间)

  • 该关系中,每一个属性值都是不可分的数据项,所有此关系模式为1NF;
  • 该关系中,主码是房主编号,不存在非主属性对主码的部分函数依赖,所以此关系模式为2NF;
  • 该关系中,不存在非主属性对主码的传递函数依赖,所以此关系模式为3NF;
  • 该关系中,每个属性不存在部分函数依赖也不存在传递函数依赖于候选码,所以此关系为BCNF。

(2)房屋关系
房屋编号,房主编号,房屋地点,面积,户型,照片,价格,出租状态,记录创建时间,记录更新时间)

  • 该关系中,每一个属性值都是不可分的数据项,所有此关系模式为1NF;
  • 该关系中,主码是房屋编号,不存在非主属性对主码的部分函数依赖,所以此关系模式为2NF;
  • 该关系中,不存在非主属性对主码的传递函数依赖,所以此关系模式为3NF;
  • 该关系中,每个属性不存在部分函数依赖也不存在传递函数依赖于候选码,所以此关系为BCNF。

(3)租房者关系
租房者编号,姓名,密码,性别,电话号码,职业,记录创建时间,记录更新时间)

  • 该关系中,每一个属性值都是不可分的数据项,所有此关系模式为1NF;
  • 该关系中,主码是租房者编号,不存在非主属性对主码的部分函数依赖,所以此关系模式为2NF;
  • 该关系中,不存在非主属性对主码的传递函数依赖,所以此关系模式为3NF;
  • 该关系中,每个属性不存在部分函数依赖也不存在传递函数依赖于候选码,所以此关系为BCNF。

(4)看房关系
看房信息编号,房主编号,租房者编号,看房日期,地点,记录创建时间,记录更新时间)

  • 该关系中,每一个属性值都是不可分的数据项,所有此关系模式为1NF;
  • 该关系中,主码是看房信息编号,不存在非主属性对主码的部分函数依赖,所以此关系模式为2NF;
  • 该关系中,不存在非主属性对主码的传递函数依赖,所以此关系模式为3NF;
  • 该关系中,每个属性不存在部分函数依赖也不存在传递函数依赖于候选码,所以此关系为BCNF。

(5)租房关系
租房信息编号,租房者编号,房屋编号,租房日期,记录创建时间,记录更新时间)

  • 该关系中,每一个属性值都是不可分的数据项,所有此关系模式为1NF;
  • 该关系中,主码是租房信息编号,不存在非主属性对主码的部分函数依赖,所以此关系模式为2NF;
  • 该关系中,不存在非主属性对主码的传递函数依赖,所以此关系模式为3NF;
  • 该关系中,每个属性不存在部分函数依赖也不存在传递函数依赖于候选码,所以此关系为BCNF。

(6)交易关系
交易信息编号,房主编号,房屋编号,金额,记录创建时间,记录更新时间)

  • 该关系中,每一个属性值都是不可分的数据项,所有此关系模式为1NF;
  • 该关系中,主码是交易信息编号,不存在非主属性对主码的部分函数依赖,所以此关系模式为2NF;
  • 该关系中,不存在非主属性对主码的传递函数依赖,所以此关系模式为3NF;
  • 该关系中,每个属性不存在部分函数依赖也不存在传递函数依赖于候选码,所以此关系为BCNF。

3.2 数据表


根据之前设计的概念数据模型(ER图),进一步转化为数据库管理系统支持的数据模型。
(1)数据表


(2)数据表关系

数据表之间的关系如下图所示:



4 数据库系统操作


4.1创建数据表


(1)房主
创建数据表Table_Provider,执行以下语句:

CREATE TABLE `table_provider` (
`ProviderID` varchar(8) NOT NULL COMMENT '房主ID',
`PName` varchar(20) NOT NULL COMMENT '用户名',
`Password` varchar(50) NOT NULL COMMENT '密码',
`Sex` char(1) DEFAULT NULL COMMENT '性别 (M:男,F:女)',
`Tel` varchar(15) NOT NULL COMMENT '电话号码',
`Address` varchar(50) DEFAULT NULL COMMENT '家庭住址',
`Createtime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`Updatetime` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录修改时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='房主信息表';


(2)房屋
创建数据表Table_House,执行以下语句:
CREATE TABLE `table_house` (
`HouseID` varchar(8) NOT NULL COMMENT '房屋ID',
`ProviderID` varchar(8) DEFAULT NULL COMMENT '房主ID',
`Address` varchar(50) NOT NULL COMMENT '房屋地点',
`Area` varchar(8) NOT NULL COMMENT '房屋面积',
`Type` varchar(8) NOT NULL COMMENT '房屋户型',
`Picture` varchar(50) NOT NULL COMMENT '房屋照片',
`Status` char(1) NOT NULL COMMENT '出租价格',
`Price` varchar(50) NOT NULL COMMENT '房屋出租状态 (Y:已出租, F:未出租)',
`Createtime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`Updatetime` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录修改时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='房屋信息表';


(3)租房者
创建数据表Table_Customer,执行以下语句:
CREATE TABLE `table_customer` (
`CustomerID` varchar(8) NOT NULL COMMENT '租房者ID',
`CName` varchar(20) NOT NULL COMMENT '姓名',
`Password` varchar(50) NOT NULL COMMENT '密码',
`Sex` char(1) DEFAULT NULL COMMENT '性别 (M:男,F:女)',
`Tel` varchar(15) NOT NULL COMMENT '电话号码',
`Job` varchar(20) DEFAULT NULL COMMENT '职业',
`Createtime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`Updatetime` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录修改时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='租房者信息表';


(4)看房
创建数据表Table_Showing,执行以下语句:
CREATE TABLE `table_showing` (
`ShowID` varchar(8) NOT NULL COMMENT '看房信息ID',
`Date` datetime NOT NULL COMMENT '看房日期',
`Address` varchar(50) NOT NULL COMMENT '地点',
`ProviderID` varchar(8) DEFAULT NULL COMMENT '房主ID',
`CustomerID` varchar(8) DEFAULT NULL COMMENT '租房者ID',
`Createtime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`Updatetime` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录修改时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='看房信息表';


(5)租房
创建数据表Table_Renting,执行以下语句:
CREATE TABLE `table_renting` (
`RentID` varchar(8) NOT NULL COMMENT '租房信息ID',
`Date` datetime NOT NULL COMMENT '日期',
`CustomerID` varchar(8) DEFAULT NULL COMMENT '租房者ID',
`HouseID` varchar(8) DEFAULT NULL COMMENT '房屋ID',
`Createtime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`Updatetime` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录修改时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='租房信息表';


(6)交易
创建数据库Table_Deal,执行以下语句:
CREATE TABLE `table_deal` (
`DealID` varchar(8) NOT NULL COMMENT '交易信息ID',
`Price` varchar(50) NOT NULL COMMENT '金额',
`ProviderID` varchar(8) DEFAULT NULL COMMENT '房主ID',
`HouseID` varchar(8) DEFAULT NULL COMMENT '房屋ID',
`Createtime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`Updatetime` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录修改时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='交易信息表';


4.2 添加数据
(1)房主
假设现在有10位房主准备把房子交给中介公司进行出租,这时候应该把10位房主的信息添加到数据表Table_Provider里面:
INSERT INTO `table_provider` 
(`ProviderID`, `PName`, `Password`, `Sex`, `Tel`, `Address`) 
VALUES 
('1', 'testProvider1', '123456', 'F', '123456', 'testAddress1'), 
('2', 'testProvider2', '123456', 'F', '123456', 'testAddress2'), 
('3', 'testProvider3', '123456', 'F', '123456', 'testAddress3'), 
('4', 'testProvider4', '123456', 'F', '123456', 'testAddress4'), 
('5', 'testProvider5', '123456', 'F', '123456', 'testAddress5'), 
('6', 'testProvider6', '123456', 'F', '123456', 'testAddress6'), 
('7', 'testProvider7', '123456', 'F', '123456', 'testAddress7'), 
('8', 'testProvider8', '123456', 'F', '123456', 'testAddress8'), 
('9', 'testProvider9', '123456', 'F', '123456', 'testAddress9'), 
('10', 'testProvider10', '123456', 'F', '123456', 'testAddress10');

2)房屋
假设10位房主拥有的房屋总共有10套,则应该把房屋信息添加到数据表Table_House里面:
INSERT INTO 
`table_house` 
(`HouseID`, `ProviderID`, `Address`, `Area`, `Type`, `Picture`, `Status`, `Price`) 
VALUES 
('1', '1', 'testAddress1', '60', '复式', '图片路径1', 'N', '2000'), 
('2', '2', 'testAddress2', '60', '复式', '图片路径2', 'N', '2000'), 
('3', '3', 'testAddress3', '60', '复式', '图片路径3', 'N', '2000'), 
('4', '2', 'testAddress4', '60', '复式', '图片路径4', 'N', '2000'), 
('5', '5', 'testAddress5', '60', '复式', '图片路径5', 'N', '2000'), 
('6', '6', 'testAddress6', '60', '复式', '图片路径6', 'N', '2000'), 
('7', '7', 'testAddress7', '60', '复式', '图片路径7', 'N', '2000'), 
('8', '8', 'testAddress8', '60', '复式', '图片路径8', 'N', '2000'), 
('9', '9', 'testAddress9', '60', '复式', '图片路径9', 'N', '2000'), 
('10', '10', 'testAddress10', '60', '复式', '图片路径10', 'N', '2000');

(3)租房者
假设已经有10位顾客准备租房,现向数据表Table_Customer中插入这10位顾客的信息,执行以下语句:
INSERT INTO `table_customer` 
(`CustomerID`, `CName`, `Password`, `Sex`, `Tel`, `Job`) 
VALUES 
('1', 'testCustomer1', '123456', 'M', '123456', '学生'), 
('2', 'testCustomer2', '123456', 'M', '123456', '教师'),
('3', 'testCustomer3', '123456', 'M', '123456', '学生'), 
('4', 'testCustomer4', '123456', 'M', '123456', '教师'),
('5', 'testCustomer5', '123456', 'M', '123456', '学生'), 
('6', 'testCustomer6', '123456', 'M', '123456', '教师'),
('7', 'testCustomer7', '123456', 'M', '123456', '学生'), 
('8', 'testCustomer8', '123456', 'M', '123456', '教师'),
('9', 'testCustomer9', '123456', 'M', '123456', '学生'), 
('10', 'testCustomer10', '123456', 'M', '123456', '教师');


(4)看房
假如租房顾客testCustomer1想要联系房主testprovider1一起看房子,则应该往数据表Table_Showing添加数据:
INSERT INTO `table_showing` 
(`ShowID`, `Date`, `Address`, `ProviderID`, `CustomerID`) 
VALUES 
('1', '2015-12-17 00:00:00', 'testAddress1', '1', '1');


(5)租房
假如租房顾客testCustomer1决定要租用编号为1的房屋,则应该将信息插入数据表Table_Renting:
INSERT INTO `table_renting` 
(`RentID`, `Date`, `CustomerID`, `HouseID`) 
VALUES 
('1', '2015-12-31 00:00:00', '1', '1');


(6)交易
中介公司根据编号为1的房屋已经被租用的信息,需要与房主完成租金交易,此时应该将交易信息添加到数据表Table_Deal:
INSERT INTO `table_deal` 
(`DealID`, `Price`, `ProviderID`, `HouseID`) 
VALUES 
('1', '1000', '1', '1');


4.3 修改数据

假如房主testProvider1想要将自己的名称修改为superProvader,则需要执行语句:

UPDATE `table_provider` 
SET `PName` = 'superProvider' 
WHERE `table_provider`.`ProviderID` = '1';


其他数据表的修改方式类似。

4.4 查询数据

(1)子查询
假如需要查询编号为1的租房订单中的顾客的姓名和职业,则执行以下语句:

SELECT CName,Job 
FROM `table_customer` 
WHERE CustomerID IN(SELECT CustomerID FROM table_renting WHERE RentID=1)


查询结果为:testCustomer1,学生
(2)连接查询
假如想要查询已经将房屋出租的所有房主的姓名,可以对房主信息表和交易信息表进行 内连接查询,执行以下语句:
SELECT PName 
FROM table_provider 
JOIN table_deal ON table_provider.ProviderID=table_deal.ProviderID 


查询结果为:superProvider

4.5 索引

(1)房主
在表Table_Provider中,为列ProviderID创建索引:

ALTER TABLE `table_provider`
ADD PRIMARY KEY (`ProviderID`),
ADD UNIQUE KEY `ProviderID` (`ProviderID`);


(2)房屋
在表Table_House中,为列HouseID创建索引:
ALTER TABLE `table_house`
ADD PRIMARY KEY (`HouseID`),
ADD UNIQUE KEY `HouseID` (`HouseID`),
ADD KEY `ProviderID` (`ProviderID`);


(3)租房者
在表Table_Customer中,为列CustomerID创建索引:
ALTER TABLE `table_customer`
ADD PRIMARY KEY (`CustomerID`),
ADD UNIQUE KEY `CustomerID` (`CustomerID`);


(4)看房
在表Table_Showing中,为列ShowID创建索引:
ALTER TABLE `table_showing`
ADD PRIMARY KEY (`ShowID`),
ADD UNIQUE KEY `ShowID` (`ShowID`),
ADD KEY `CustomerID` (`CustomerID`),
ADD KEY `ProviderID` (`ProviderID`);


(5)租房
在表Table_Rentign中,为列RentID创建索引:
ALTER TABLE `table_renting`
ADD PRIMARY KEY (`RentID`),
ADD UNIQUE KEY `RentID` (`RentID`),
ADD KEY `HouseID` (`HouseID`),
ADD KEY `ProviderID` (`CustomerID`);


(6)交易
在表Table_Deal中,为列DealID创建索引:
ALTER TABLE `table_deal`
ADD PRIMARY KEY (`DealID`),
ADD UNIQUE KEY `DealID` (`DealID`),
ADD KEY `ProviderID` (`ProviderID`),
ADD KEY `CustomerID` (`HouseID`);


4.6 约束

(1) 房屋
在表Table_House中,添加外键约束:

ALTER TABLE `table_house`
ADD CONSTRAINT `table_house_ibfk_2` FOREIGN KEY (`ProviderID`) REFERENCES `table_provider` (`ProviderID`) ON DELETE SET NULL ON UPDATE CASCADE;


(2) 看房
在表Table_Showing中,添加外键约束:
ALTER TABLE `table_showing`
ADD CONSTRAINT `table_showing_ibfk_1` FOREIGN KEY (`CustomerID`) REFERENCES `table_customer` (`CustomerID`) ON DELETE SET NULL ON UPDATE CASCADE,
ADD CONSTRAINT `table_showing_ibfk_2` FOREIGN KEY (`ProviderID`) REFERENCES `table_provider` (`ProviderID`) ON DELETE SET NULL ON UPDATE CASCADE;


(3) 租房
在表Table_Renting中,添加外键约束:
ALTER TABLE `table_renting`
ADD CONSTRAINT `table_renting_ibfk_1` FOREIGN KEY (`HouseID`) REFERENCES `table_house` (`HouseID`) ON DELETE SET NULL ON UPDATE CASCADE,
ADD CONSTRAINT `table_renting_ibfk_2` FOREIGN KEY (`CustomerID`) REFERENCES `table_customer` (`CustomerID`) ON DELETE SET NULL ON UPDATE CASCADE;


(4) 交易
在表Table_Deal中,添加外键约束:
ALTER TABLE `table_deal`
ADD CONSTRAINT `table_deal_ibfk_1` FOREIGN KEY (`ProviderID`) REFERENCES `table_provider` (`ProviderID`) ON DELETE SET NULL ON UPDATE CASCADE,
ADD CONSTRAINT `table_deal_ibfk_2` FOREIGN KEY (`HouseID`) REFERENCES `table_house` (`HouseID`) ON DELETE SET NULL ON UPDATE CASCADE;


4.7 触发器

当确定完成租房交易之后,需要将对应房屋的出租状态设置为“已出租”,即对应数据“Y”:

CREATE TRIGGER `T_UpdateStatus` AFTER INSERT ON `table_deal` FOR EACH ROW UPDATE table_house SET STATUS=’Y’ WHERE HouseID=new.HouseID 




猜你喜欢

转载自blog.csdn.net/liuruiqun/article/details/52063734