FIRE

Nothing is impossible

车辆租赁系统的数据库设计

随语

温习数据库知识时,无聊的学生管理系统、课程管理系统看的令人麻木🙃为啥不搞点不一样的嘞?自己做个其他模板它不香嘛,搞起!

完整数据库文件👉车辆租赁系统数据库-Vehicle Database.sql

系统功能设想

✔对象说明

车辆租赁系统主要包含以下三个管理系统:

  • 客户信息管理:客户基本信息(客户编号、客户姓名、客户密码、客户电话、客户邮箱、客户身份证号、租用数量)增加、修改、查询与删除。

  • 车辆信息管理:车辆基本信息(车辆编号、车辆分类号、车辆名称、车辆品牌、车辆价格、车辆押金、单日租用价格、入库时间)增加、修改、查询与删除。

  • 租赁业务管理:车辆的租用和归还功能,对车辆租用信息(包括租用编号,客户编号,车辆编号,租用日期,应归还日期,归还日期)增加、修改、查询与删除。

✔功能说明

车辆租赁系统的使用者分为客户管理员

💫管理员模块

管理员可以进行客户管理车辆管理车辆租用业务管理个人信息管理

  1. 用户管理功能:可以直接查看用户的信息,能直接看到每一位用户的租用信息,并对违规客户(逾期归还车辆或破坏车辆多次)进行删除。

  2. 车辆管理功能:可以增加、删除、更改数据库中车辆的信息。

  3. 车辆租用业务管理功能:是将客户租用相关车辆的信息登记到客户信息上,客户想要租用车辆必须通过管理员使用该功能将该车辆信息登记到其账户上。

  4. 个人信息管理:指管理员可以对自身的账户信息进行修改。

💫客户模块

客户可以查询个人信息车辆信息

  1. 查询个人信息:可以查看用户的个人信息、车辆租用信息以及更改用户账号密码。当用户登录成功后就能看到自身租用的车辆的时间、归还期限。并且可以管理自身的账户密码。

  2. 查询车辆信息:可以通过搜索精确查找到具体需要的车辆,并且可以查看每一辆车的详细信息。当客户找到想要租用的车辆时,凭借车辆编号确定车辆,至管理员处将租用信息进行登记,并缴纳相对应的押金及租金,完成车辆租借业务。

车辆租赁系统功能结构图

业务流程分析

概念设计

✔目标

  • 管理员方便管理车辆和用户信息,以及租赁业务信息

  • 客户根据个人的具体需要,方便查询所需车辆。

✔实体

  • 管理员需要记录管理员编号、管理员姓名、管理员密码、管理员电话、管理员邮箱、管理员身份证号

  • 客户需要记录客户编号、客户姓名、客户密码、客户电话、客户邮箱、客户身份证号、租用数量

  • 车辆需要记录车辆编号、车辆分类号、车辆名称、车辆品牌、车辆价格、车辆押金、单日租用价格、入库时间

  • 租用业务需要记录租用编号、客户编号、车辆编号、租用日期、应归还日期、归还日期

✔E-R图

管理员-车辆ER

管理员-客户ER

客户-车辆ER

全局ER

逻辑设计

✔E-R图到关系模式的转换

  • 一名管理员可以管理多辆车,一辆车可以被多名管理员管理

  • 一名管理员可以管理多名客户,一名客户可以被多名管理员管理

  • 一名客户可以租用多辆车,一辆车可以被多名客户租用

各表均不存在部分依赖和传递依赖,满足1NF,2NF,3NF的条件

数据库索引与视图

✔索引

  • 车辆非聚集索引:便于用户快速查询自己所需车辆。
1
2
3
4
5
/*为车辆表的车辆名称及品牌建立索引i_carName*/
create nonclustered
index i_carName
on Car(carName,brandName)
drop index Car.i_carName
  • 用户非聚集索引:便于管理员在必要时及时联系相关客户。
1
2
3
4
5
/*为用户表的用户编号、姓名和联系方式建立索引i_consumer*/
create nonclustered
index i_consumer
on Consumer(userNo,userName,tel,email)
drop index Consumer.i_consumer
  • 租赁信息非聚集索引:便于管理员更好地查询修改租赁表中的相关信息。
1
2
3
4
5
/*为租赁表的车主及车辆建立索引i_hire*/
create nonclustered
index i_hire
on Hire(userNo,carNo)
drop index Hire.i_hire

✔视图

  • 个人信息视图:此视图以“王兰”为例,用户可以随时查看自己的个人信息,并对相关信息进行修改。
1
2
3
4
5
create view vPersonalInfo
as
select userName,psd,tel,email,identifycard
from consumer
where userName = '王兰'
  • 车辆信息视图:便于客户根据自身需要查询车辆,知晓车辆的相关信息。
1
2
3
4
5
create view vCarInfo
as
select carNo,className,carName,brandName,rent,shopDate
from Car c,CarClass cc
where cc.classNo = c.classNo
  • 租赁信息视图:此视图可以查看每一条租赁记录,便于管理员查看过往的租赁记录,并知晓哪些车辆已被租赁,并对逾期未归还车辆的客户及时联系,同时也便于用户查询自己的租赁信息。
1
2
3
4
5
create view vHireInfo
as
select h.rid,c.userNo,carName,brandName,hireDate,shouldDate,returndate,tel,email
from Hire h,Consumer c,Car
where c.userNo = h.userNo and car.carNo = h.carNo

数据库触发器

  • 管理员在租赁业务表中插入租用信息时,通过不同用户的账号,对账户中的租用数量自动增加,若车辆已经归还(即returnDate不为空),则不会记录在客户的租赁数量中。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
create trigger tgUpdateCount 
on hire
after insert
as
begin
declare @returnDate datetime
select @returnDate = returnDate from inserted
if(@returnDate is null)
begin
update consumer
set hireCount += 1
where userNo =
(
select i.userNo
from inserted i
)
end
end
  • 客户租用车辆的上限为6辆,若已经租用了6辆,系统将自动不再受理租赁业务。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
create trigger tgLimitation
on hire
after insert
as
begin
declare @userno varchar(20)
declare @num tinyint
declare @msg varchar(200)
select @userNo = userNo from inserted
select @num = count(*)
from hire
where userNo = @userNo and returnDate is null
if(@num>6)
begin
rollback transaction
set @msg = '对不起,您已达租用上限(6辆)!'
raiserror(@msg,1,1)
end
end
-------- 🎈本文结束 感谢阅读🎈 --------
感謝老闆支持!