目录
一、前言
所需环境
需求:
背景:
E-R图:
关系模式:
备注:
数据表的设计:
表1 车库
表2 操作员
表3 车辆
表4 停车卡
表5 停车记录
二、创建数据库
1.创建各实体表:
(1)操作员:
(2)车库:
(3)停车卡:
(4)车辆:
(5)停车记录:
2.插入信息
(1) 操作员
(2)车库
(3)停车卡
(4)车辆
(5)停车记录
三、创建触发器
1.车辆进入车库自动发放停车卡
触发器插入车辆数据:
效果展示:
2. 车辆出库自动更新车位数量
删除车辆数据:
效果展示:
3.更新车辆进场时间自动更新停车记录进场时间
更新更新车辆进场时间
效果展示:
4.自动扣费更新余额
插入停车记录
效果展示:
触发器备注:
四、答疑解惑
一、前言
所需环境
1.运行环境:win11;
2.MySQL可视化工具:navicat;
3.数据库:MySql 5.7/8.0等版本均可;
需求:
有400个车位(带编号)的停车场位于某地铁站旁边,不能超量停车,计费停车,第一个小时计费2元,后每小时1元,不足1小时的按1小时计。
停车场收费管理系统主要完成但不限于以下功能:
- 车位管理(车位有编号,剩余量多少有提示)
- 操作员信息管理
- 停车卡管理(停车卡是停车的依据,也是结算的依据,如某车辆(按车牌)什么时间取得某停车卡,结算时就按这个停车卡来结算)(停车卡可分类别,如:月租卡、特种免费卡、储值卡、时租卡(临时卡)等)
- 车辆入库管理(车牌,日期时间,停车卡等)
- 车辆出库管理(停车卡,车牌,日期时间,计费,操作员等)
背景:
- 一个停车位只能被一辆车占用
- 一个操作员可以有多个停车记录,但一个停车记录只能对应一个操作员
- 一辆车可以拥有多个停车记录(每次进入停车场都要记录)
- 一个停车卡可以对应多个停车记录(即同一个停车卡可以多次进入停车场停放车辆),但一个停车记录只能对应一个停车卡
- 一个停车记录对应一个停车位,一个停车位可以对应多个停车记录(即同一个停车位可以停放多辆车)
- 一个停车记录可以对应一个停车费用(记录出库时计算),一个停车费用对应一个停车记录
其中:
- 车库包含下列属性:车位号,总车位数,剩余车位数
- 操作员包含下列属性:工号,姓名,性别,年龄
- 停车卡包含下列属性:卡号,类型(月租卡、储值卡、临时卡等),停车时间,余额
- 车辆包含下列属性: 车牌号,进场时间
- 停车记录包含下列属性:订单编号,入库时间,出库时间,停车时间,费用
E-R图:
关系模式:
车库(车位号,总车位数,剩余车位数,工号)
操作员(工号,姓名,性别,年龄)
停车卡(停车卡号,类型,余额,工号)
车辆(车牌号,进场时间, 停车卡号)
停车记录(订单编号,入库时间,出库时间,停车时间,费用,车牌号)
备注:
下划线为主键,红色字为外键;
数据表的设计:
表1 车库
字段 | 数据类型 | 长度 | 备注 | |
车位号 | varchar | 50 | 主键 | |
总车位数 | int | 5 | ||
剩余车位数 | int | 5 | Not null | |
工号 | varchar | 50 | 外键 |
表2 操作员
字段 | 数据类型 | 长度 | 备注 | |
工号 | varchar | 50 | 主键 | |
姓名 | varchar | 50 | Not null | |
性别 | varchar | 50 | ||
年龄 | int | 5 |
表3 车辆
字段 | 数据类型 | 长度 | 备注 | |
车牌号 | varchar | 50 | 主键 | |
进场时间 | date | Not null | ||
停车卡号 | varchar | 50 | 外键 |
表4 停车卡
字段 | 数据类型 | 长度 | 备注 | |
停车卡号 | varchar | 50 | 主键 | |
类型 | varchar | 10 | Not null | |
余额 | float | 10 | ||
工号 | varchar | 50 | 外键 |
表5 停车记录
字段 | 数据类型 | 长度 | 备注 | |
订单编号 | varchar | 50 | 主键 | |
入库时间 | date | Not null | ||
出库时间 | date | Not null | ||
停车时间 | int | 8 | ||
费用 | varchar | 20 | ||
车牌号 | varchar | 20 | 外键 |
二、创建数据库
Create database 车库停车收费管理系统 character set utf8 collate utf8_general_ci use 车库停车收费管理系统 //在新建查询选择前选择数据库
1.创建各实体表:
(1)操作员:
CREATE TABLE 操作员 ( 工号 VARCHAR(50) NOT NULL PRIMARY KEY, 姓名 VARCHAR(50) NOT NULL, 性别 VARCHAR(50) NOT NULL, 年龄 INT NOT NULL );
(2)车库:
CREATE TABLE 车库 ( 车位号 VARCHAR(50) NOT NULL PRIMARY KEY, 总车位数 INT NOT NULL, 剩余车位数 INT NOT NULL, 工号 VARCHAR(50), FOREIGN KEY (工号) REFERENCES 操作员(工号) );
(3)停车卡:
CREATE TABLE 停车卡 ( 停车卡号 VARCHAR(50), 类型 VARCHAR(10), 余额 FLOAT(8), 工号 VARCHAR(50), PRIMARY KEY (停车卡号), FOREIGN KEY (工号) REFERENCES 操作员(工号) );
(4)车辆:
CREATE TABLE 车辆 ( 车牌号 VARCHAR(20) NOT NULL PRIMARY KEY, 进场时间 DATETIME NOT NULL, 停车卡号 VARCHAR(50) NOT NULL, FOREIGN KEY (停车卡号) REFERENCES 停车卡(停车卡号) );
(5)停车记录:
CREATE TABLE 停车记录 ( 订单编号 VARCHAR(50), 入库时间 DATETIME, 出库时间 DATETIME, 停车时间 INT(8), 费用 VARCHAR(20), 车牌号 VARCHAR(20), PRIMARY KEY (订单编号), FOREIGN KEY (车牌号) REFERENCES 车辆(车牌号) );
2.插入信息
(1) 操作员
INSERT INTO 操作员 VALUES ('Y001', '张三', '男', '28');
(2)车库
INSERT INTO 车库 VALUES (1, 400, 43, 'Y001'); INSERT INTO 车库 VALUES (2, 400, 45, 'Y001'); INSERT INTO 车库 VALUES (3, 400, 42, 'Y001'); INSERT INTO 车库 VALUES (4, 400, 46, 'Y001'); INSERT INTO 车库 VALUES (5, 400, 44, 'Y001'); INSERT INTO 车库 VALUES (6, 400, 41, 'Y001'); INSERT INTO 车库 VALUES (7, 400, 49, 'Y001'); INSERT INTO 车库 VALUES (8, 400, 39, 'Y001'); INSERT INTO 车库 VALUES (9, 400, 48, 'Y001'); INSERT INTO 车库 VALUES (10, 400, 47, 'Y001');
(3)停车卡
INSERT INTO 停车卡 VALUES ('T1001', '月租卡', 500, 'Y001'); INSERT INTO 停车卡 VALUES ('T1002', '特种免费卡', 200, 'Y001'); INSERT INTO 停车卡 VALUES ('T1003', '储值卡', 300, 'Y001'); INSERT INTO 停车卡 VALUES ('T1004', '临时卡', 120, 'Y001'); INSERT INTO 停车卡 VALUES ('T1005', '临时卡', 80, 'Y001'); INSERT INTO 停车卡 VALUES ('T1006', '特种免费卡', 400, 'Y001'); INSERT INTO 停车卡 VALUES ('T1007', '月租卡', 200, 'Y001'); INSERT INTO 停车卡 VALUES ('T1008', '临时卡', 60, 'Y001'); INSERT INTO 停车卡 VALUES ('T1009', '储值卡', 700, 'Y001'); INSERT INTO 停车卡 VALUES ('T1010', '临时卡', 100, 'Y001');
(4)车辆
INSERT INTO 车辆 VALUES ('粤A123456', '2023-05-26 08:00:00', 'T1001'); INSERT INTO 车辆 VALUES ('川A23456', '2023-05-25 09:00:00', 'T1002'); INSERT INTO 车辆 VALUES ('川G34567', '2023-05-26 10:00:00', 'T1003'); INSERT INTO 车辆 VALUES ('川J45678', '2023-05-24 11:00:00', 'T1004'); INSERT INTO 车辆 VALUES ('川A56789', '2023-05-24 08:00:00', 'T1005'); INSERT INTO 车辆 VALUES ('川S67890', '2023-05-26 13:00:00', 'T1006'); INSERT INTO 车辆 VALUES ('川A78901', '2023-05-26 14:00:00', 'T1007'); INSERT INTO 车辆 VALUES ('川S89012', '2023-05-27 15:00:00', 'T1008'); INSERT INTO 车辆 VALUES ('川A90123', '2023-05-27 16:00:00', 'T1009'); INSERT INTO 车辆 VALUES ('鲁A01234', '2023-05-25 17:00:00', 'T1010');
(5)停车记录
INSERT INTO 停车记录 VALUES ('202305260801', '2023-05-26 08:00:00', '2023-05-26 10:00:00', 2, '3', '粤A123456'); INSERT INTO 停车记录 VALUES ('202305270902', '2023-05-25 09:00:00', '2023-05-26 11:00:00', 26, '27', '川A23456'); INSERT INTO 停车记录 VALUES ('202305261003', '2023-05-26 10:00:00', '2023-05-26 12:00:00', 2, '3', '川G34567'); INSERT INTO 停车记录 VALUES ('202305241104', '2023-05-24 11:00:00', '2023-05-24 15:00:00', 4, '5', '川J45678'); INSERT INTO 停车记录 VALUES ('202305240805', '2023-05-24 08:00:00', '2023-05-24 09:00:00', 1, '2', '川A56789'); INSERT INTO 停车记录 VALUES ('202305260806', ' 2023-05-26 13:00:00', ' 2023-05-26 20:00:00', 7, '8', '川S67890'); INSERT INTO 停车记录 VALUES ('202305260807', ' 2023-05-26 14:00:00', ' 2023-05-26 20:00:00', 6, '7', '川A78901'); INSERT INTO 停车记录 VALUES ('202305270808', '2023-05-27 15:00:00', '2023-05-27 20:00:00', 5, '6', '川S89012'); INSERT INTO 停车记录 VALUES ('202305270809', '2023-05-27 16:00:00', '2023-05-27 20:00:00', 4, '5', '川A90123'); INSERT INTO 停车记录 VALUES ('202305250810', '2023-05-25 17:00:00', '2023-05-25 21:00:00', 4, '5', '鲁A01234');
三、创建触发器
1.车辆进入车库自动发放停车卡
CREATE TRIGGER 自动发放停车卡 AFTER INSERT ON 车辆 FOR EACH ROW BEGIN INSERT INTO 停车卡 (停车卡号, 类型, 余额, 工号) VALUES (NEW.车牌号, '临时卡', 0, 'Y001'); END;
触发器插入车辆数据:
INSERT INTO 车辆 VALUES ('川G01234', '2023-05-30 17:00:00', 'T1011');
效果展示:
2. 车辆出库自动更新车位数量
CREATE TRIGGER 车位更新 AFTER DELETE ON 车辆 FOR EACH ROW UPDATE 车库 SET 剩余车位数 = 剩余车位数 + 1 WHERE 车位号 = '1';
删除车辆数据:
-- 因为外键约束所以要先删除停车记录 DELETE FROM 停车记录 WHERE 车牌号 = '粤A123456'; DELETE FROM 车辆 WHERE 车牌号 = '粤A123456';
效果展示:
3.更新车辆进场时间自动更新停车记录进场时间
AFTER UPDATE ON 车辆 FOR EACH ROW BEGIN UPDATE 停车记录 SET 入库时间 = NEW.进场时间 WHERE 车牌号 = NEW.车牌号; END;
更新更新车辆进场时间
UPDATE 车辆 SET 进场时间 = '2023-05-26 08:35:10' WHERE 车牌号 = '粤A123456';
效果展示:
4.自动扣费更新余额
CREATE TRIGGER 更新余额 AFTER INSERT ON 停车记录 FOR EACH ROW BEGIN UPDATE 停车卡 SET 余额 = 余额 - NEW.费用 WHERE 停车卡号 = (SELECT 停车卡号 FROM 车辆 WHERE 车牌号 = NEW.车牌号); END;
插入停车记录
INSERT INTO 停车记录 VALUES ('202305250811', '2023-05-26 17:00:00', '2023-05-26 21:00:00', 4, '5', '鲁A01234');
效果展示:
触发器备注:
查询触发器:Show triggers
删除触发器:DROP TRIGGER 触发器名;
例如:DROP TRIGGER 更新余额;
四、答疑解惑
代码有问题或需要其他的查询语句,都可以随时评论留言或联系博主。
还多请各位小伙伴多多点赞支持,你们的支持是我最大的动力。
博主VX:18884281851
谢谢各位的支持~~
还没有评论,来说两句吧...