(详情请见报告)
实现功能:
(1)根据系统功能进行概念模型、关系模型和物理模型设计;
(2)根据数据库物理模型在MySQL中创建数据库和数据表,对表添加主键约束、外键约束等,并完成数据的插入功能;
(3)模拟系统业务场景,对表中的数据进行简单查询、分组聚合查询、多表关联查询等操作;
(4)模拟系统业务场景,通过创建视图对表查询进行优化;
(5)模拟系统业务场景,对表中的数据进行修改和删除操作;
(6)模拟系统业务需求,创建存储过程,执行并验证存储过程结果的正确性;
(7)创建新用户;给新用户授予数据表的查询、插入、更新权限;实现回收用户权限,删除用户;
(8)使用JDBC连接数据库,实现系统基本增删改查功能。
目的:
(1)掌握数据库基础设计相关理论知识;
(2)能够通过本地PC机安装MySQL数据库,建议5.5以上版本;
(3)掌握数据库基本DDL语法,能够根据物理设计创建对应的数据库对象;
(4)掌握数据库基本DML语法,能够按照业务功能对表中的数据进行增删改操作;
(5)掌握数据库基本DQL语法,能够按照业务需求对表中的数据进行查询操作;
(6)掌握操作视图的操作语法,能够通过视图对数据库进行优化;
(7)掌握存储过程创建、调用语法,能够通过创建存储过程实现业务功能;
(8)掌握用户和权限操作语法,能够通过创建用户和权限实现不同角色用户访问操作数据库;
概念模型设计
(1)实体及属性
客房 (客房编号,酒店ID,当天状态,位置,房型,价格,折扣价,平方数,床位,配套,图片)
订单 (ID,旅客ID,客房编号,开始时间,结束时间,费用,订单状态,评价,分数)
酒店 (ID,酒店名称,地址,客房数,客服电话,状态)
旅客 (ID,姓名,性别,身份证,等级,手机号码,账号,密码)
管理用户 (ID,姓名,性别,身份证,等级,手机号码,账号,密码)
(2)关系
一个酒店有多个客房,一个客房属于某个酒店,酒店和客房是一对多关系
一个旅客生成多个订单, 订单属于某个旅客,旅客与订单是一对多关系
一个客房生成多个订单,一个订单属于某个客房,订单与客房是一对多关系
E-R图
因图片不适应
物理模型设计
表名 | 列名 | 字段类型 | 长度 | 是否为空 | 备注 |
客房 | 客房编号 | char | 20 | NO | 主键 |
酒店ID | int | YES | 外键 | ||
当天状态 | varchar | 20 | YES | ||
位置 | varchar | 20 | YES | ||
房型 | varchar | 20 | YES | 标准间、高级标间 三人间、豪华套房 | |
价格 | float | YES | |||
折扣价 | float | YES | |||
平方数 | varchar | 20 | YES | ||
床位 | varchar | 20 | YES | ||
配套 | text | 65535 | YES | ||
图片 | text | 65535 | YES | ||
订单 | ID | int | NO | 主键 | |
旅客ID | int | YES | 外键 | ||
客房编号 | char | 20 | YES | 外键 | |
开始时间 | datetime | YES | |||
结束时间 | datetime | YES | |||
费用 | float | YES | |||
订单状态 | varchar | 20 | YES | ||
评价 | varchar | 20 | YES | ||
分数 | int | YES | |||
酒店 | ID | int | NO | 主键 | |
酒店名称 | varchar | 60 | YES | ||
地址 | varchar | 150 | YES | ||
客房数 | int | YES | |||
客服电话 | int | YES | |||
状态 | varchar | 20 | YES | ||
旅客 | ID | int | NO | 主键 | |
姓名 | varchar | 20 | YES | ||
性别 | varchar | 20 | YES | ||
身份证 | varchar | 30 | YES | ||
等级 | varchar | 20 | YES | ||
手机号码 | varchar | 20 | YES | ||
账号 | varchar | 255 | YES | ||
密码 | varchar | 255 | YES | ||
管理用户 | ID | int | NO | 主键 | |
姓名 | varchar | 20 | YES | ||
性别 | varchar | 20 | YES | ||
身份证 | varchar | 30 | YES | ||
等级 | varchar | 20 | YES | ||
手机号码 | varchar | 20 | YES | ||
账号 | varchar | 255 | YES | ||
密码 | varchar | 255 | YES |
系统实现
数据表
创建
create table 酒店(
ID int primary key auto_increment,
酒店名称 varchar(20),
地址 varchar(50),
客房数 int,
客服电话 int,
状态 varchar(20)
);
create table 客房(
客房编号 char(20) primary key,
酒店ID int,
当天状态 varchar(20),
位置 varchar(20),
房型 varchar(20),
价格 float,
折扣价 float,
平方数 varchar(20),
床位 varchar(20),
配套 text,
图片 text,
foreign key (酒店ID) REFERENCES 酒店(ID)
);
create table 旅客(
ID int primary key auto_increment,
账号 varchar(20),
密码 varchar(20),
姓名 varchar(20),
性别 varchar(20),
身份证 varchar(30),
等级 varchar(20),
手机号码 varchar(20)
);
create table 管理用户(
ID int primary key auto_increment,
账号 varchar(20),
密码 varchar(20),
姓名 varchar(20),
性别 varchar(20),
身份证 varchar(30),
等级 varchar(20),
手机号码 varchar(20)
);
create table 订单(
ID int primary key auto_increment,
旅客ID int,
客房编号 char(20),
开始时间 datetime,
结束时间 datetime,
费用 float,
订单状态 varchar(20),
评价 varchar(20),
分数 int,
foreign key (旅客ID) REFERENCES 旅客(ID),
foreign key (客房编号) REFERENCES 客房(客房编号)
);
插入
INSERT INTO 酒店(ID, 酒店名称, 地址, 客房数, 客服电话, 状态) VALUES (1, '橙子酒店丰乐南路分店', 'XX省XX市丰乐南路301号4-8层', 300, 400666882, '正常营业');
INSERT INTO 酒店(ID, 酒店名称, 地址, 客房数, 客服电话, 状态) VALUES (2, '橙子酒店兴亚路分店', 'XX省XX市兴亚路路401号3-8层', 500, 400666885, '正常营业');
INSERT INTO 管理用户(ID, 姓名, 性别, 身份证, 等级, 手机号码) VALUES (1000, '阎薇', '男', '441224198807080016', '普通', '18027368620');
INSERT INTO 管理用户(ID, 姓名, 性别, 身份证, 等级, 手机号码) VALUES (1001, '小薇', '女', '441224198807080026', '前台', '18027368620');
INSERT INTO 管理用户(ID, 姓名, 性别, 身份证, 等级, 手机号码) VALUES (1002, '大丹', '男', '441224198807080036', '管理员', '18027368621');
INSERT INTO 管理用户(ID, 姓名, 性别, 身份证, 等级, 手机号码) VALUES (1003, '王旭', '男', '441224198807080046', '酒店行政', '18027368622');
INSERT INTO 旅客(ID, 姓名, 性别, 身份证, 等级, 手机号码) VALUES (1, '阎薇', '男', '441224198807080016', '普通', '18027368620');
INSERT INTO 旅客(ID, 姓名, 性别, 身份证, 等级, 手机号码) VALUES (2, '乔蓉', '女', '441224197807080016', '普通', '18027368620');
INSERT INTO 旅客(ID, 姓名, 性别, 身份证, 等级, 手机号码) VALUES (3, '路军', '男', '441224199507080016', 'VIP', '18027368620');
INSERT INTO 旅客(ID, 姓名, 性别, 身份证, 等级, 手机号码) VALUES (4, '孙越', '女', '441224198807080016', '普通', '18027368620');
INSERT INTO 旅客(ID, 姓名, 性别, 身份证, 等级, 手机号码) VALUES (5, '吴迪', '男', '441224199207080016', 'VIP', '18027368620');
INSERT INTO 旅客(ID, 姓名, 性别, 身份证, 等级, 手机号码) VALUES (6, '佟玲', '女', '441224197107080016', '普通', '18027368620');
INSERT INTO 旅客(ID, 姓名, 性别, 身份证, 等级, 手机号码) VALUES (7, '杨晴', '男', '441224199007080016', '普通', '18027368620');
INSERT INTO 旅客(ID, 姓名, 性别, 身份证, 等级, 手机号码) VALUES (8, '吕波', '女', '441224198807080016', 'VIP', '18027368620');
INSERT INTO 旅客(ID, 姓名, 性别, 身份证, 等级, 手机号码) VALUES (9, '闫懋', '男', '441224199807080016', '普通', '18027368620');
INSERT INTO 旅客(ID, 姓名, 性别, 身份证, 等级, 手机号码) VALUES (10, '张艳', '女', '441224199907080016', '高级VIP', '18027368620');
INSERT INTO 旅客(ID, 姓名, 性别, 身份证, 等级, 手机号码) VALUES (11, '王晨', '男', '441224198207080016', '普通', '18027368620');
INSERT INTO 旅客(ID, 姓名, 性别, 身份证, 等级, 手机号码) VALUES (12, '柳奥', '女', '441224198507080016', 'VIP', '18027368620');
INSERT INTO 旅客(ID, 姓名, 性别, 身份证, 等级, 手机号码) VALUES (13, '张超', '男', '441224198807080016', '高级VIP', '18027368620');
INSERT INTO 客房(客房编号, 酒店ID, 当天状态, 位置, 房型, 价格, 折扣价, 平方数, 床位, 配套, 图片) VALUES ('FL401', 1, '可用', '4楼401', '双人房', 258, 232.2, '35', '2床', '停车场/洗漱/浴缸/WIFI', '/chengzi/pic/301.png');
INSERT INTO 客房(客房编号, 酒店ID, 当天状态, 位置, 房型, 价格, 折扣价, 平方数, 床位, 配套, 图片) VALUES ('FL402', 1, '可用', '4楼402', '三人房', 288, 259.2, '40', '4床', '停车场/洗漱/公用电脑', '/chengzi/pic/302.png');
INSERT INTO 客房(客房编号, 酒店ID, 当天状态, 位置, 房型, 价格, 折扣价, 平方数, 床位, 配套, 图片) VALUES ('FL403', 1, '可用', '4楼403', '单人房', 168, 151.2, '25', '1床', '停车场/洗衣机/办公桌', '/chengzi/pic/303.png');
INSERT INTO 客房(客房编号, 酒店ID, 当天状态, 位置, 房型, 价格, 折扣价, 平方数, 床位, 配套, 图片) VALUES ('FL501', 1, '可用', '5楼501', '双人房', 258, 232.2, '35', '2床', '停车场/洗漱/浴缸/WIFI', '/chengzi/pic/304.png');
INSERT INTO 客房(客房编号, 酒店ID, 当天状态, 位置, 房型, 价格, 折扣价, 平方数, 床位, 配套, 图片) VALUES ('FL502', 1, '可用', '5楼502', '三人房', 288, 259.2, '40', '4床', '停车场/洗漱/公用电脑', '/chengzi/pic/305.png');
INSERT INTO 客房(客房编号, 酒店ID, 当天状态, 位置, 房型, 价格, 折扣价, 平方数, 床位, 配套, 图片) VALUES ('FL503', 1, '可用', '5楼503', '单人房', 168, 151.2, '25', '1床', '停车场/洗衣机/办公桌', '/chengzi/pic/306.png');
INSERT INTO 客房(客房编号, 酒店ID, 当天状态, 位置, 房型, 价格, 折扣价, 平方数, 床位, 配套, 图片) VALUES ('XY301', 2, '可用', '3层301', '双人房', 258, 232.2, '35', '2床', '停车场/洗漱/浴缸/大阳台', '/chengzi/pic/307.png');
INSERT INTO 客房(客房编号, 酒店ID, 当天状态, 位置, 房型, 价格, 折扣价, 平方数, 床位, 配套, 图片) VALUES ('XY302', 2, '可用', '3层302', '三人房', 288, 259.2, '40', '4床', '停车场/洗漱/公用电脑', '/chengzi/pic/308.png');
INSERT INTO 客房(客房编号, 酒店ID, 当天状态, 位置, 房型, 价格, 折扣价, 平方数, 床位, 配套, 图片) VALUES ('XY303', 2, '可用', '3层303', '单人房', 168, 151.2, '25', '1床', '停车场/洗衣机/办公桌', '/chengzi/pic/309.png');
INSERT INTO 客房(客房编号, 酒店ID, 当天状态, 位置, 房型, 价格, 折扣价, 平方数, 床位, 配套, 图片) VALUES ('XY304', 2, '可用', '4层303', '双人房', 258, 232.2, '35', '2床', '停车场/洗漱/浴缸', '/chengzi/pic/310.png');
INSERT INTO 客房(客房编号, 酒店ID, 当天状态, 位置, 房型, 价格, 折扣价, 平方数, 床位, 配套, 图片) VALUES ('XY401', 2, '可用', '4层401', '三人房', 288, 259.2, '40', '4床', '停车场/洗漱/公用电脑', '/chengzi/pic/311.png');
INSERT INTO 客房(客房编号, 酒店ID, 当天状态, 位置, 房型, 价格, 折扣价, 平方数, 床位, 配套, 图片) VALUES ('XY402', 2, '可用', '4层402', '单人房', 168, 151.2, '25', '1床', '停车场/洗衣机/办公桌', '/chengzi/pic/312.png');
INSERT INTO 客房(客房编号, 酒店ID, 当天状态, 位置, 房型, 价格, 折扣价, 平方数, 床位, 配套, 图片) VALUES ('XY403', 2, '可用', '4层403', '主题房', 328, 295.2, '65', '6床', '停车场/洗漱/浴缸/带自助餐', '/chengzi/pic/313.png');
INSERT INTO 订单(ID, 旅客ID, 客房编号, 开始时间, 结束时间, 费用, 订单状态, 评价, 分数) VALUES (1, 1, 'FL402', '2022-07-01 00:00:00', '2022-07-02 00:00:00', 288, '完成', '很好', 80);
INSERT INTO 订单(ID, 旅客ID, 客房编号, 开始时间, 结束时间, 费用, 订单状态, 评价, 分数) VALUES (2, 2, 'FL403', '2022-07-02 00:00:00', '2022-07-03 00:00:00', 168, '完成', '一般', 60);
INSERT INTO 订单(ID, 旅客ID, 客房编号, 开始时间, 结束时间, 费用, 订单状态, 评价, 分数) VALUES (3, 3, 'FL501', '2022-07-03 00:00:00', '2022-07-04 00:00:00', 258, '完成', '非常好', 90);
INSERT INTO 订单(ID, 旅客ID, 客房编号, 开始时间, 结束时间, 费用, 订单状态, 评价, 分数) VALUES (4, 4, 'FL502', '2022-07-04 00:00:00', '2022-07-05 00:00:00', 288, '完成', '很好', 80);
INSERT INTO 订单(ID, 旅客ID, 客房编号, 开始时间, 结束时间, 费用, 订单状态, 评价, 分数) VALUES (5, 5, 'FL503', '2022-07-05 00:00:00', '2022-07-06 00:00:00', 168, '完成', '一般', 60);
INSERT INTO 订单(ID, 旅客ID, 客房编号, 开始时间, 结束时间, 费用, 订单状态, 评价, 分数) VALUES (6, 6, 'XY301', '2022-07-06 00:00:00', '2022-07-07 00:00:00', 258, '完成', '非常好', 90);
INSERT INTO 订单(ID, 旅客ID, 客房编号, 开始时间, 结束时间, 费用, 订单状态, 评价, 分数) VALUES (7, 7, 'XY302', '2022-07-07 00:00:00', '2022-07-08 00:00:00', 288, '完成', '很好', 80);
INSERT INTO 订单(ID, 旅客ID, 客房编号, 开始时间, 结束时间, 费用, 订单状态, 评价, 分数) VALUES (8, 8, 'XY303', '2022-07-08 00:00:00', '2022-07-09 00:00:00', 168, '完成', '一般', 60);
INSERT INTO 订单(ID, 旅客ID, 客房编号, 开始时间, 结束时间, 费用, 订单状态, 评价, 分数) VALUES (9, 9, 'XY304', '2022-07-09 00:00:00', '2022-07-10 00:00:00', 258, '完成', '非常好', 90);
INSERT INTO 订单(ID, 旅客ID, 客房编号, 开始时间, 结束时间, 费用, 订单状态, 评价, 分数) VALUES (10, 10, 'XY401', '2022-07-10 00:00:00', '2022-07-11 00:00:00', 288, '预定', '', NULL);
INSERT INTO 订单(ID, 旅客ID, 客房编号, 开始时间, 结束时间, 费用, 订单状态, 评价, 分数) VALUES (11, 3, 'FL501', '2022-07-11 00:00:00', '2022-07-12 00:00:00', 258, '预定', '', NULL);
INSERT INTO 订单(ID, 旅客ID, 客房编号, 开始时间, 结束时间, 费用, 订单状态, 评价, 分数) VALUES (12, 4, 'FL502', '2022-07-12 00:00:00', '2022-07-13 00:00:00', 288, '预定', '', NULL);
INSERT INTO 订单(ID, 旅客ID, 客房编号, 开始时间, 结束时间, 费用, 订单状态, 评价, 分数) VALUES (13, 5, 'FL503', '2022-07-13 00:00:00', '2022-07-14 00:00:00', 168, '预定', '', NULL);
INSERT INTO 订单(ID, 旅客ID, 客房编号, 开始时间, 结束时间, 费用, 订单状态, 评价, 分数) VALUES (14, 6, 'XY301', '2022-07-14 00:00:00', '2022-07-15 00:00:00', 258, '预定', '', NULL);
INSERT INTO 订单(ID, 旅客ID, 客房编号, 开始时间, 结束时间, 费用, 订单状态, 评价, 分数) VALUES (15, 7, 'XY302', '2022-07-15 00:00:00', '2022-07-16 00:00:00', 288, '预定', '', NULL);
INSERT INTO 订单(ID, 旅客ID, 客房编号, 开始时间, 结束时间, 费用, 订单状态, 评价, 分数) VALUES (16, 3, 'XY303', '2022-07-16 00:00:00', '2022-07-17 00:00:00', 168, '预定', '', NULL);
INSERT INTO 订单(ID, 旅客ID, 客房编号, 开始时间, 结束时间, 费用, 订单状态, 评价, 分数) VALUES (17, 4, 'XY304', '2022-07-17 00:00:00', '2022-07-18 00:00:00', 258, '预定', '', NULL);
INSERT INTO 订单(ID, 旅客ID, 客房编号, 开始时间, 结束时间, 费用, 订单状态, 评价, 分数) VALUES (18, 5, 'FL501', '2022-07-18 00:00:00', '2022-07-19 00:00:00', 258, '预定', '', NULL);
INSERT INTO 订单(ID, 旅客ID, 客房编号, 开始时间, 结束时间, 费用, 订单状态, 评价, 分数) VALUES (19, 6, 'FL502', '2022-07-19 00:00:00', '2022-07-20 00:00:00', 288, '预定', '', NULL);
INSERT INTO 订单(ID, 旅客ID, 客房编号, 开始时间, 结束时间, 费用, 订单状态, 评价, 分数) VALUES (20, 7, 'FL503', '2022-07-20 00:00:00', '2022-07-21 00:00:00', 168, '预定', '', NULL);
INSERT INTO 订单(旅客ID, 客房编号, 开始时间, 结束时间, 费用, 订单状态, 评价, 分数) VALUES (8, 'XY301', '2022-07-04 00:00:00', '2022-07-11 00:00:00', 258, '预定', '', NULL);
修改
INSERT INTO 旅客(姓名, 性别, 身份证, 等级, 手机号码,账号,密码) VALUES ('张飞', '男', '441224188807080016', '普通', '18027368620','1681cc','661254212');
旅客随即办理了VIP,数据更新
update 旅客 set 等级='VIP' where 姓名='张飞';
数据查询
查询有多少间客房以及平均价格
select count(*),avg(价格) from 客房
显示所有旅客信息,尽管没下过单,一样显示
select * from 旅客 left join 订单 on 订单.旅客id=旅客.id
、显示订购过的客房的客房详情
Select * from 客房 where 客房编号 in (select 客房编号 from 订单);