本日志记录数据库课程设计过程,选题为酒店客房管理系统。
目录
一、系统分析
1.1 项目背景与目标
随着旅游业的蓬勃发展,以及世界商贸活动的日益频繁,酒店、餐饮、娱乐等周边行业迎来了快速增长期。在这一背景下,酒店宾馆行业规模不断扩大,组织架构愈发复杂,服务项目日益多元,每日产生的信息量呈指数级增长。传统宾馆客房管理模式的弊端愈发凸显。人工记录客户预订、入住、退房信息,不仅需要投入大量人力,且信息更新不及时,极易出现遗漏或错误,影响客户入住体验;员工信息与客房信息的管理因缺乏系统化工具,无法实现高效统筹,导致资源调配不合理,运营效率低下。为在激烈的市场竞争中脱颖而出,提升宾馆运营效率与服务质量,降低管理成本,宾馆客房管理系统应运而生。
该系统的核心目标是构建一个集员工管理、客房管理、客户管理、订单管理等功能于一体的数字化管理平台。通过信息化手段,实现宾馆业务流程的自动化与规范化,减少人工操作误差,提高信息处理速度与准确性,为宾馆日常运营提供数据支持,辅助管理层科学决策,从而提升宾馆的整体竞争力与客户满意度。
1.2 总体需求概述
酒店管理系统旨在实现宾馆运营管理的高效化、规范化与信息化,涵盖员工管理、客房管理、客户管理、订单管理、报表与维护、登录与权限控制、数据备份与恢复、消息通知与提醒以及系统设置与管理等多个核心功能模块,全方位满足宾馆日常运营与管理需求。
在员工管理方面,系统支持添加、删除、修改和查询员工信息的操作。添加员工时,需输入姓名、性别、职位等详细信息,系统自动生成唯一编号并进行数据校验;删除员工操作仅超级管理员有权限,且删除后会同步更新关联业务数据;修改员工信息时涉及权限控制与数据校验;查询员工则提供多种灵活的查询方式。
客房管理功能包含预约、入住和房间管理。预约功能支持个人与团体预约,系统自动检索房间可用情况并生成预订单;取消预约时同步释放房间资源。入住功能针对个人和团体客户设计不同操作流程。房间管理支持添加、修改房间信息,具备库存管理和版本记录功能,确保房间信息的准确与可追溯。
客户管理提供按多种条件查询客户信息的方式,并支持添加客户,自动分配客户 ID 建立档案。订单管理可按不同条件查询预订和订单,对订单状态进行跟踪与处理,支持异常订单标记和跟进。
报表与维护功能实现数据库自动备份、导出,支持特定数据表导出,同时可生成客房入住率、营收、员工绩效等各类管理报表,并支持导出为常见格式文件。登录与权限控制功能保障系统安全,提供登录、找回密码、修改密码等操作,根据用户角色分配权限。数据备份与恢复功能确保数据安全,在数据丢失时可从备份恢复。消息通知与提醒功能分为内部通知、客户通知和提醒功能,方便信息传递与重要事项提醒。系统设置与管理功能允许管理员设置系统参数、管理字典数据,并记录用户操作日志,便于审计与故障排查。
1.3 用户角色定义
在酒店管理系统中,包括系统管理员、酒店员工、客户,其中系统管理员是操作员,负责系统的整体设置、维护和管理,包括用户账户创建、权限分配等。酒店员工负责客户的接待工作,包括办理入住登记、退房手续,等方面的问题,时,需要及时更新客房状态信息,确保系统中客房状态的准确性。客户负责预定房间,查看订单信息,享受服务等操作。
二、系统设计
2.1系统功能设计
2.1.1 员工管理功能
添加员工:系统自动生成唯一员工编号,并将信息存入员工档案库。
删除员工:可通过姓名、员工编号等条件搜索定位到需删除的员工,从员工档案库中彻底删除相关信息,并同步更新与该员工关联的其他业务数据(如交接员工负责的客房等)。
修改员工:可对姓名、职位(支持跨部门调动操作,同步更新考勤和权限信息)、联系方式等字段进行编辑,修改完成后点击 “保存”。
查询员工信息:支持按姓名模糊查询(如输入 “张” 可显示所有姓张员工)、按职位精准查询(选择 “前台” 列出所有前台员工)、按入职时间区间查询(选择起始和结束日期),也可组合多个条件进行高级查询。
2.1.2 客房管理功能
预约功能:根据客户姓名、联系方式、入住日期、退房日期、入住人数等基本信息,若为团体预约需额外输入团体名称、分房需求(如大床房数量、标间数量等)。系统自动检索对应日期的房间可用情况,生成唯一预订单号。
取消预约:员工在系统中输入预订单号或客户姓名和手机号定位订单,生成取消订单记录,同步释放对应房间资源,更新预订状态为 “已取消”。
入住功能:
个人入住:
操作流程:输入客户身份证号调取预约信息,确认身份后分配房间。
团体入住:
操作流程:针对团体客户,可批量分配房间,支持按楼层、房型等条件自动分组。系统生成团体入住清单,包含每个成员的房间号、姓名、联系方式等信息
房间管理:
添加房间:填写房间设施描述,提交后系统更新房间数据库在预订页面同步展示新房间信息。
库存管理:可设置房间库存上限,当预订达到上限时自动停止接受该房间预订。
修改房间:可对价格、设施描述、等信息进行更新。若修改房间状态为 “维修中”,则该房间在预订系统中显示不可预订。
版本记录:保留每次修改前的历史版本,方便追溯和对比。
2.1.3 客户管理功能
查询客户:支持按姓名、手机号、入住记录(如查询某时间段内入住次数)等多种条件查询,也可通过客户标签(如“常住客户”)进行筛选。
添加客户:输入客户姓名、性别、身份证号码、联系方式等基础信息。提交后系统自动分配唯一客户 ID,建立客户档案。
2.1.4 订单管理功能
查询预订:可按预订单号、客户姓名、预订日期等条件查询。查询结果展示订单状态(待入住、已取消、已完成等)、房间信息、价格明细等内容。支持对异常订单(如长时间未确认订单)进行标记和跟进。
查询订单:可筛选已完成订单(查看消费明细、结算方式、客户评价等)和未完成订单(跟踪未结算款项、处理售后问题)。
2.1.5 报表与维护功能
数据库备份:系统按照设定的时间间隔(如每天凌晨)自动进行数据库全量备份,备份数据存储在本地服务器与云端,确保数据安全可靠。
导出数据库:管理员可将整个数据库导出为特定格式文件,用于数据迁移、本地存储或灾难恢复演练。
导出数据表:支持选择特定的数据表(如客户表、订单表等)进行导出,方便财务、运营等部门进行数据分析与审查。
报表展示
-
生成报表:系统可生成各类管理报表,如客房入住率报表、营收报表、员工绩效报表等,通过图表与数据结合的方式直观展示,为管理层决策提供依据。
-
导出报表:支持将生成的报表导出为 Excel、PDF 等格式文件,便于打印、记录和分享。
2.1.6 登录与权限控制功能
登录:用户输入正确的用户名和密码,系统验证通过后进入相应操作界面,若连续多次输入错误密码,账号将被锁定一段时间。
找回密码:用户忘记密码时,可通过绑定的手机或邮箱接收验证码,重置密码,确保用户能够重新获取系统访问权限。
修改密码:用户可修改个人密码,增强账号安全性,修改密码时需验证原密码。
权限控制:管理员根据用户角色分配不同的操作权限,如普通员工只能处理客户业务,无法进行员工管理与系统设置,确保系统操作的安全性与规范性。
2.1.7 数据备份与恢复功能
定期备份数据库:定期备份数据库,确保数据安全。
恢复功能:确保数据丢失时,可以从备份中恢复。
2.1.8 消息通知与提醒功能
内部通知:管理员可向全体员工或指定员工发送内部通知,如工作安排、会议通知等,员工登录系统后可查看通知内容。
客户通知:系统自动向客户发送消息提醒,如预订成功提醒、入住前一天温馨提示、退房结算通知等,也可由工作人员手动发送营销活动通知等。
提醒功能:对于即将到期的订单、需要维护的客房等,系统自动向相关人员发送提醒消息,避免遗漏重要事项。
2.1.9 系统设置与管理功能
系统参数设置:管理员可设置系统的基本参数,如营业时间、节假日安排、房价计算规则等,确保系统符合宾馆实际运营需求。
字典管理:对系统中的各类字典数据进行管理,如房型字典、职位字典等,方便统一维护与更新。
日志管理:记录系统中所有用户的操作日志,包括登录时间、操作内容、操作结果等,便于审计与故障排查。
2.2 数据库设计
在酒店客房管理系统中,数据库设计至关重要。通过合理的数据库设计,可以确保系统的数据存储与访问效率,同时保证数据的完整性、安全性和一致性。以下是数据库设计的详细内容:
2.2.1 数据库需求分析
酒店客房管理系统的数据库需要支持高并发访问、良好的事务处理能力和数据一致性。根据系统需求,数据库设计应包括:
- 客房管理:管理酒店的客房信息,包括房间类型、价格、实时状态及关联设备等。
- 客户信息管理:存储客户核心数据、历史入住记录与积分,结合折扣规则实现会员管理。
- 订单管理:记录预订、入住、退房全流程,关联客户与客房,依据折扣规则计算金额。
- 员工信息管理:维护员工档案、岗位分配与权限,通过部门编号实现组织架构管理。
- 财务与报表管理:跟踪订单财务数据,生成各类统计报表,支持自定义导出。
- 安全与权限控制:基于角色分配功能模块与数据操作权限,记录审计日志。
- 设备管理:管理客房设备资产与维修记录,实现生命周期跟踪。
- 折扣规则管理:配置会员等级折扣策略,设置生效 / 失效时间。
- 部门管理:维护部门信息,建立员工与部门关联。
2.2.2 数据库概念结构设计
数据库的概念设计基于实体关系模型(ER模型)。通过E-R图,定义数据库中的主要实体及其相互关系。
主要的实体包括:
- 员工表(Employee):(员工编号 eno, 员工姓名 ename, 性别 gender, 年龄 age, 联系方式 econtact, 岗位 epos, 权限编号 pno, 入职时间 edate, 部门编号 dno),其中部门编号 dno 关联部门表,用于表示员工所属部门。
- 客户表(Customer):(客户编号 cno,客户姓名 cname, 身份证号 cid, 联系方式 ccontact, , 历史入住记录 chistory, 积分 cpoints,会员等级 member_level)
- 客房表(Room):(客房编号 rno, 客房类型 rtype, 客房价格 rprice, 客房状态 rstatus, 楼层 floor, 房间面积 area, 床位数 bed_num)
- 订单表(Order):(订单编号 ono, 客户编号 cno, 客房编号 rno, 入住日期 in_date, 退房日期 out_date, 折扣比例discount_rate,订单金额 order_amount, 支付状态 payment_status, 订单创建时间 order_time,员工编号eno)
- 报表表(Report):(报表编号 rno, 报表类型 rtype, 报表内容 rcontent, 报表生成时间 rtime)
- 权限表(Permission):(权限编号 pno, 权限名称 pname, 权限描述 description, 角色 role)
- 部门表(Department):(部门编号 dno, 部门名称 dname, 部门负责人 dleader, 部门联系方式 dcontact)
- 设备表(Equipment):(设备编号 eqp_id, 设备名称 eqp_name, 客房编号 rno, 购买时间 purchase_time, 维修记录 maintenance_records, 设备状态 eqp_status),设备与客房关联,用于记录客房内设备信息。
- 折扣规则表(DiscountRule):( 会员等级 member_level, 折扣比例 discount_rate, 生效时间 effective_time, 失效时间 expiry_time),为订单金额计算、客户优惠策略提供依据。
- 入住记录表(StayRecord):(记录编号 srid,订单编号 ono,客户编号 cno,客户姓名 cname,客房编号 rno,入住日期 in_date,退房日期 out_date,入住人数 nums)
E-R图:
员工表:
客户表:
客房表:
订单表:
报表表:
权限表:
部门表:
设备表:
折扣规则表:
入住记录表:
主要的关系:
- 客户与订单:多对多(一个客户可以预定多个订单,一个订单可以有多个客户)。
- 员工与客房:多对多(一个员工可以管理多个客房,一个客房可由多个员工负责)。
- 订单与客房:多对多(一个订单可以订多个客房,一个客房在不同时间可以有多个订单)。
- 员工与订单:多对多(一个员工可以处理多个订单,一个订单可由多个员工参与)。
- 员工与部门:多对一(多个员工从属于一个部门)。
- 客房与设备:一对多(一个客房配备多个设备,一个设备属于一个客房)。
- 客户与折扣规则:多对多(一个客户适用多个折扣规则,一个规则应用于多个客户)。
- 员工与权限:多对多(一个员工拥有多个权限,一个权限被多个员工拥有)。
- 权限与报表:多对多(一个权限访问多个报表,一个报表被多个权限访问)。
- 订单与入住记录:一对多(一个订单可以包含多条入住记录,如团体订单分配多个客房,一条入住记录仅属于一个订单)
- 订单与折扣规则:多对一(一个订单适用一条折扣规则,一条折扣规则可被多个订单用)。
- 客户与客房:多对一 (一个客房可以入住多个客户 一个客户可以入住一个客房)。
2.2.3 数据库逻辑结构设计
在将E-R图转换为关系模式时,遵循以下原则:对于1:N联系,如客户与订单、团体客户与客房的关系,将联系信息合并到“N”端实体中,通过添加外键实现;而对于M:N联系,如员工与客房、员工与订单的关系,则创建独立的中间关联表来表示多对多的联系。这种方式既符合数据库规范化要求,又能有效保持数据完整性与一致性。
在判断是否满足第三范式时,首先确认每个关系模式中的非主属性是否完全依赖于主键(即满足第二范式),并进一步检查是否存在非主属性之间的传递依赖。经分析,所有关系模式中非主属性均直接依赖主键,不存在部分依赖或传递依赖,因此所有关系模式均满足第三范式(3NF)。
员工(Employee)(员工编号 eno,员工姓名 ename,性别 gender,年龄 age,联系方式 econtact,岗位 epos,权限编号 pno,入职时间 edate,部门编号 dno)
客户(Customer)(客户编号 cno,客户姓名 cname,身份证号 cid,联系方式 ccontact,历史入住记录 chistory,积分 cpoints,会员等级 member_level)
客房(Room)(客房编号 rno,客房类型 rtype,客房价格 rprice,客房状态 rstatus,楼层 floor,房间面积 area,床位数 bed_num)
订单(Order)(订单编号 ono,客户编号 cno,客房编号 rno,入住日期 in_date,退房日期 out_date,折扣比例discount_rate,订单金额 order_amount,支付状态 payment_status,订单创建时间 order_time,员工编号eno)
报表(Report)(报表编号 rno,报表类型 rtype,报表内容 rcontent,报表生成时间 rtime)
权限(Permission)(权限编号 pno,权限名称 pname,权限描述 description,角色 role)
部门(Department)(部门编号 dno,部门名称 dname,部门负责人 dleader,部门联系方式 dcontact)
设备(Equipment)(设备编号 eqp_id,设备名称 eqp_name,客房编号 rno,购买时间 purchase_time,维修记录 maintenance_records,设备状态 eqp_status)
折扣规则(DiscountRule)(会员等级 member_level,折扣比例 discount_rate,生效时间 effective_time,失效时间 expiry_time)
入住记录(StayRecord)(记录编号 srid,订单编号 ono,客户编号 cno,客户姓名 cname,入住人数 nums,入住日期 in_date,退房日期 out_date)
员工与订单(Emp_Order)(员工编号 eno,订单编号 ono)
客户与折扣规则(Cust_DiscountRule)(客户编号 cno,会员等级 member_level)
员工与权限(Emp_Permission)(员工编号 eno,权限编号 pno)
权限与报表(Perm_Report)(权限编号 pno,报表编号 rno)
客户与订单(Customer_Order)(客户编号 cno,订单编号 ono)
订单与客房(Order_Room)(订单编号 ono,客房编号 rno,入住日期 in_date,退房日期 out_date)
员工与客房(Emp_Room)(员工编号 eno,客房编号 rno)
2.2.4 数据库物理结构设计
代码如下:
1.创建酒店管理系统数据库
-- 创建酒店管理系统数据库
CREATE DATABASE IF NOT EXISTS hotel_system;
USE hotel_system;
2.部门表(departments)
部门(Department)(部门编号 dno,部门名称 dname,部门负责人 dleader,部门联系方式 dcontact)
-- 创建部门表(departments)
CREATE TABLE IF NOT EXISTS departments (
dno INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
dname VARCHAR(50) NOT NULL UNIQUE,
dleader VARCHAR(30),
dcontact VARCHAR(20)
);
3. 权限表(permissions)
权限(Permission)(权限编号 pno,权限名称 pname,权限描述 description,角色 role)
-- 创建权限表(permissions)
CREATE TABLE IF NOT EXISTS permissions (
pno INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
pname VARCHAR(50) NOT NULL UNIQUE,
description TEXT,
role VARCHAR(30)
);
4.员工表(employees)
员工(Employee)(员工编号 eno,员工姓名 ename,性别 gender,年龄 age,联系方式 econtact,岗位 epos,权限编号 pno,入职时间 edate,部门编号 dno)
-- 创建员工表(employees)
CREATE TABLE IF NOT EXISTS employees (
eno INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
ename VARCHAR(50) NOT NULL,
gender ENUM('男', '女', '未知') DEFAULT '未知',
age TINYINT UNSIGNED,
econtact VARCHAR(20),
epos VARCHAR(30),
pno INT UNSIGNED,
edate DATE,
dno INT UNSIGNED,
FOREIGN KEY (pno) REFERENCES permissions(pno),
FOREIGN KEY (dno) REFERENCES departments(dno)
);
5.折扣规则表(DiscountRule)
折扣规则(DiscountRule)(会员等级 member_level,折扣比例 discount_rate,生效时间 effective_time,失效时间 expiry_time)
-- 创建折扣规则表(DiscountRule)
CREATE TABLE IF NOT EXISTS DiscountRule (
member_level VARCHAR(20) PRIMARY KEY,
discount_rate DECIMAL(3, 2) NOT NULL,
effective_time DATETIME NOT NULL,
expiry_time DATETIME NOT NULL
);
6.客户表(customers)
客户(Customer)(客户编号 cno,客户姓名 cname,身份证号 cid,联系方式 ccontact,历史入住记录 chistory,积分 cpoints,会员等级 member_level)
-- 创建客户表(customers)
CREATE TABLE IF NOT EXISTS customers (
cno INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
cname VARCHAR(50) NOT NULL,
cid CHAR(18) UNIQUE,
ccontact VARCHAR(20),
cadd VARCHAR(255),
chistory TEXT,
cpoints INT UNSIGNED DEFAULT 0,
member_level VARCHAR(20) NOT NULL,
FOREIGN KEY (member_level) REFERENCES DiscountRule(member_level)
);
7.客房表(rooms)
客房(Room)(客房编号 rno,客房类型 rtype,客房价格 rprice,客房状态 rstatus,楼层 floor,房间面积 area,床位数 bed_num)
-- 创建客房表(rooms)
CREATE TABLE IF NOT EXISTS rooms (
rno INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
rtype VARCHAR(50),
rprice DECIMAL(10, 2) NOT NULL,
rstatus ENUM('空闲', '已入住', '维修中', '已预订') DEFAULT '空闲',
floor TINYINT UNSIGNED,
area DECIMAL(5, 2),
bed_num TINYINT UNSIGNED
);
8.订单表(orders)
订单(Order)(订单编号 ono,客户编号 cno,客房编号 rno,入住日期 in_date,退房日期 out_date,折扣比例discount_rate,订单金额 order_amount,支付状态 payment_status,订单创建时间 order_time,员工编号eno)
-- 创建订单表(orders)
CREATE TABLE IF NOT EXISTS orders (
ono BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
cno INT UNSIGNED NOT NULL,
rno INT UNSIGNED NOT NULL,
eno INT UNSIGNED,
in_date DATE NOT NULL,
out_date DATE,
discount_rate DECIMAL(3, 2) DEFAULT 1.00,
order_amount DECIMAL(10, 2) NOT NULL,
payment_status ENUM('未支付', '已支付', '已取消', '部分支付') DEFAULT '未支付',
order_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (cno) REFERENCES customers(cno),
FOREIGN KEY (rno) REFERENCES rooms(rno),
FOREIGN KEY (eno) REFERENCES employees(eno)
);
9.报表表(reports)
报表(Report)(报表编号 rno,报表类型 rtype,报表内容 rcontent,报表生成时间 rtime)
-- 创建报表表(reports)
CREATE TABLE IF NOT EXISTS reports (
rno INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
rtype VARCHAR(50),
rcontent TEXT,
rtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
10.设备表(equipment)
设备(Equipment)(设备编号 eqp_id,设备名称 eqp_name,客房编号 rno,购买时间 purchase_time,维修记录 maintenance_records,设备状态 eqp_status)
-- 创建设备表(equipment)
CREATE TABLE IF NOT EXISTS equipment (
eqp_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
eqp_name VARCHAR(50) NOT NULL,
rno INT UNSIGNED,
purchase_time DATE,
maintenance_records TEXT,
eqp_status ENUM('正常', '维修中', '报废') DEFAULT '正常'
);
11.入住记录表(StayRecord)
入住记录(StayRecord)(记录编号 srid,订单编号 ono,客户编号 cno,客户姓名 cname,入住人数 nums,入住日期 in_date,退房日期 out_date)
-- 创建入住记录表(StayRecord)
CREATE TABLE IF NOT EXISTS StayRecord (
srid INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
ono BIGINT UNSIGNED NOT NULL,
cno INT UNSIGNED NOT NULL,
cname JSON NOT NULL,
rno INT UNSIGNED NOT NULL,
in_date DATE NOT NULL,
out_date DATE,
nums TINYINT UNSIGNED NOT NULL,
FOREIGN KEY (ono) REFERENCES orders(ono),
FOREIGN KEY (cno) REFERENCES customers(cno),
FOREIGN KEY (rno) REFERENCES rooms(rno),
UNIQUE KEY (ono)
);
2.2.5 数据库视图设计
视图设计理念:
避免业务代码中编写多表连接语句,提升查询效率。
通过视图限制敏感字段访问(如隐藏员工薪资字段),符合权限控制要求。
将常用统计逻辑(如入住率计算)固化在视图中,确保数据一致性。
以直观的字段和聚合结果辅助管理层快速决策,减少数据处理时间。
内容:客户订单视图、部门员工视图、订单详情视图、每日营收统计视图、每日营收统计视图、客房入住率统计视图、客房状态视图、客户积分排行视图、员工绩效统计视图等
(1)基础信息视图
1. room_status(客房详情视图)
直接映射 rooms 表的核心字段,提供客房基础信息的快速查询入口,避免业务层直接访问底层表,简化数据获取逻辑。
作用:
前台预订:查询空闲客房的类型、价格、床位数等信息,匹配客户需求(如家庭客户需要 3 张床位的家庭房)。
客房管理:维护人员查看客房面积、楼层等物理属性,安排清洁或维修任务。
数据展示:在官网或 APP 展示客房详情,供客户预订前参考。
2. employee_department(部门员工视图)
通过关联 employees 和 departments 表,将员工信息与所属部门信息聚合,解决多表查询的复杂性。
作用:
组织架构管理:快速查看员工所属部门、岗位及部门负责人,便于人事调度和协作。
权限分配:结合 elevel 字段,管理员可按部门和岗位分配系统操作权限(如客房部员工只能管理客房相关数据)。
(2)业务统计视图
1. customer_orders(客户订单统计视图)
以客户为中心,聚合订单数量、支付状态和消费金额,支持客户价值分层。
作用:
会员管理:通过订单总数和总消费金额识别高频客户,针对性升级会员等级(如银卡会员消费满一定金额后升级为金卡)。
财务对账:按客户统计未支付订单,提醒催收;已取消订单占比过高时,分析取消原因(如价格或服务问题)。
3. daily_revenue(每日营收统计视图)
按日期统计已支付订单的营收数据,强调时间维度的财务监控。
作用:
财务日报:自动生成每日营收报表,对比实际营收与目标值,及时发现业绩波动。
成本分析:结合订单数量和平均金额,评估单日运营效率(如订单量高但均价低时,检查折扣策略是否合理)。
(3)流程跟踪视图
1. order_details(订单详情视图)
跨表关联订单、客户、客房、折扣规则和员工信息,形成完整的订单生命周期档案。
作用:
客户服务:客服人员通过订单详情快速获取客户偏好(如上次入住的客房类型),提供个性化服务。
异常处理:标记未支付或长时间未确认的订单,触发提醒机制(如短信通知客户完成支付)。
(4)绩效与规则视图
1. employee_performance(员工绩效统计视图)
通过订单处理量和金额评估员工绩效,结合部门分组实现横向对比。
作用:
绩效考核:按部门排名,奖励高绩效员工(如前台接待处理订单总金额最高者获 “月度之星”)。
培训优化:对处理订单量低的员工进行业务培训,提升整体服务效率。
2. customer_points_ranking(客户积分排行视图)
基于积分机制激励客户忠诚度,通过排名直观展示高价值客户。
作用:
精准营销:向积分排名靠前的客户推送专属折扣(如钻石会员享 8 折优惠)。
积分消耗:提醒积分即将过期的客户使用积分兑换礼品或升级客房。
1. 创建客户订单视图(customer_orders)
CREATE VIEW customer_orders AS
SELECT
c.cno,
c.cname,
c.ccontact,
c.member_level,
o.ono,
o.rno,
o.in_date,
o.out_date,
o.discount_rate,
o.order_amount,
o.payment_status,
r.rtype,
r.rprice
FROM
customers c
JOIN
orders o ON c.cno = o.cno
JOIN
rooms r ON o.rno = r.rno;
2.创建部门员工视图(department_employees)
CREATE VIEW department_employees AS
SELECT
d.dno,
d.dname,
d.dleader,
e.eno,
e.ename,
e.gender,
e.age,
e.epos,
p.pname AS permission
FROM
departments d
JOIN
employees e ON d.dno = e.dno
JOIN
permissions p ON e.pno = p.pno;
3.创建订单详情视图(order_details)
CREATE VIEW order_details AS
SELECT
o.ono,
c.cname AS customer_name,
c.ccontact AS customer_contact,
r.rtype AS room_type,
r.rprice AS original_price,
o.discount_rate,
o.order_amount,
o.payment_status,
e.ename AS employee_name,
o.in_date,
o.out_date,
DATEDIFF(o.out_date, o.in_date) AS days_stayed,
sr.nums AS guest_number
FROM
orders o
JOIN
customers c ON o.cno = c.cno
JOIN
rooms r ON o.rno = r.rno
LEFT JOIN
employees e ON o.eno = e.eno
LEFT JOIN
StayRecord sr ON o.ono = sr.ono;
4.创建每日营收统计视图(daily_revenue)
CREATE VIEW daily_revenue AS
SELECT
DATE(o.order_time) AS order_date,
COUNT(o.ono) AS order_count,
SUM(CASE WHEN o.payment_status = '已支付' THEN o.order_amount ELSE 0 END) AS paid_amount,
SUM(CASE WHEN o.payment_status = '部分支付' THEN o.order_amount ELSE 0 END) AS partial_amount,
SUM(CASE WHEN o.payment_status = '未支付' THEN o.order_amount ELSE 0 END) AS unpaid_amount,
SUM(CASE WHEN o.payment_status = '已取消' THEN o.order_amount ELSE 0 END) AS cancelled_amount,
SUM(CASE WHEN o.payment_status IN ('已支付', '部分支付') THEN o.order_amount ELSE 0 END) AS total_revenue
FROM
orders o
GROUP BY
DATE(o.order_time)
ORDER BY
order_date DESC;
5.创建客房状态视图(room_status)
CREATE OR REPLACE VIEW room_status AS
SELECT
r.rno AS 房间号,
r.rtype AS 房间类型,
r.rprice AS 房间价格,
r.rstatus AS 房间状态,
r.floor AS 楼层,
r.area AS 面积,
r.bed_num AS 床位数,
o.ono AS 订单号,
CASE
WHEN sr.cname IS NOT NULL THEN JSON_EXTRACT(sr.cname, '$')
ELSE '无'
END AS 入住人,
o.in_date AS 入住时间,
o.out_date AS 退房时间
FROM
rooms r
LEFT JOIN
orders o ON r.rno = o.rno
AND o.payment_status NOT IN ('已取消', '未支付')
AND (
(r.rstatus = '已入住' AND CURDATE() BETWEEN o.in_date AND COALESCE(o.out_date, CURDATE()))
OR (r.rstatus = '已预订' AND CURDATE() < o.in_date)
)
LEFT JOIN
StayRecord sr ON o.ono = sr.ono
ORDER BY
r.floor, r.rno;
6.创建客户积分排行视图(customer_points_ranking)
CREATE VIEW customer_points_ranking AS
SELECT
c.cno,
c.cname,
c.ccontact,
c.member_level,
c.cpoints,
dr.discount_rate,
RANK() OVER (ORDER BY c.cpoints DESC) AS ranking
FROM
customers c
JOIN
DiscountRule dr ON c.member_level = dr.member_level
ORDER BY
c.cpoints DESC;
7.创建员工绩效统计视图(employee_performance)
CREATE VIEW employee_performance AS
SELECT
e.eno,
e.ename,
e.epos,
d.dname AS department,
COUNT(o.ono) AS total_orders,
SUM(CASE WHEN o.payment_status IN ('已支付', '部分支付') THEN o.order_amount ELSE 0 END) AS total_amount,
SUM(CASE WHEN o.payment_status = '已支付' THEN 1 ELSE 0 END) AS paid_orders,
SUM(CASE WHEN o.payment_status = '已取消' THEN 1 ELSE 0 END) AS cancelled_orders,
ROUND(AVG(CASE WHEN o.payment_status IN ('已支付', '部分支付') THEN o.order_amount ELSE 0 END), 2) AS avg_order_value
FROM
employees e
LEFT JOIN
orders o ON e.eno = o.eno
JOIN
departments d ON e.dno = d.dno
GROUP BY
e.eno, e.ename, e.epos, d.dname
ORDER BY
total_amount DESC;
2.2.6 索引设计
1.部门编号索引:作为外键索引,加速员工表与部门表的关联查询(如查询某部门所有员工)。优化基于部门的过滤、分组操作。
CREATE INDEX idx_employee_dno ON Employee(dno);
2.员工岗位索引:加速按岗位筛选员工的查询(如查询所有 “前台接待” 岗位的员工)。支持岗位字段的排序或分组需求(如按岗位统计人数)。
CREATE INDEX idx_employee_epos ON Employee(epos);
3.员工权限等级索引:优化权限相关的查询(如查询权限等级为 “高级” 的员工)。便于系统快速匹配员工权限,提升权限校验效率。
CREATE INDEX idx_employee_elevel ON Employee(elevel);
4.客户身份证号索引:确保身份证号唯一性,避免重复录入客户信息。加速通过身份证号查询客户的场景。
CREATE UNIQUE INDEX idx_customer_cid ON Customer(cid);
5.客户联系方式索引:支持通过电话号码或邮箱查询客户(如客服根据联系方式查找客户)。
CREATE INDEX idx_customer_ccontact ON Customer(ccontact);
6.客房状态索引:高频查询场景(如查询 “可用” 或 “已预订” 状态的客房),加速过滤操作。支持实时房态查询,提升前台预订效率。
CREATE INDEX idx_room_rstatus ON Room(rstatus);
7.客房楼层索引:优化按楼层筛选客房的需求(如客户指定高楼层房间)。
CREATE INDEX idx_room_floor ON Room(floor);
8.客房类型索引:加速按类型查询客房(如查询 “大床房” 或 “套房”),支持分类展示和过滤。
CREATE INDEX idx_room_rtype ON Room(rtype);
9.订单客户编号索引:外键索引,加速订单表与客户表的关联查询(如查询某客户的所有订单)。
CREATE INDEX idx_order_cno ON Order(cno);
10.订单客房编号索引:外键索引,加速订单表与客房表的关联查询(如查询某客房的历史订单)。
CREATE INDEX idx_order_rno ON Order(rno);
11.入住 / 退房日期索引:范围查询优化(如查询某时间段内的订单),支持日期区间过滤。复合索引按顺序优先匹配in_date,提升时间范围查询效率。
CREATE INDEX idx_order_in_out_date ON Order(in_date, out_date);
12.订单支付状态索引:加速查询未支付、已支付或退款状态的订单(如财务对账、催款操作)。
CREATE INDEX idx_order_payment_status ON Order(payment_status);
13.设备状态索引:快速筛选 “正常” 或 “故障” 状态的设备(如维修部门查询待维修设备)。
CREATE INDEX idx_equipment_eqp_status ON Equipment(eqp_status);
14.会员等级、生效时间索引
索引优先匹配member_level(如查询某会员等级当前有效的折扣规则)。
CREATE INDEX idx_discount_member_time ON DiscountRule(member_level);
15.部门负责人索引支持按负责人查询部门(如查询 “张三” 管理的部门),或统计各负责人管理的部门数量。
CREATE INDEX idx_department_dleader ON Department(dleader);
2.2.7 存储过程设计
内容:把一系列相关的 SQL 操作(如客人入住流程涉及插入入住记录、更新客房状态等操作 )封装成存储过程,通过调用存储过程来完成复杂业务逻辑。
作用:提高数据库操作的效率和安全性,减少网络传输量,同时便于对业务逻辑进行集中管理和维护。
2.2.8 触发器设计
内容:例如当客人退房时,触发触发器自动更新客房状态为 “可预订”,同时计算客人消费金额并更新财务相关记录;当新订单生成时,触发触发器向客人发送预订确认短信等。
作用:实现数据库操作的自动化,确保数据的一致性和完整性,及时响应特定事件。
2.2.9 数据一致性与完整性设计
内容:通过设置主键约束(确保每条记录唯一性 )、外键约束(保证表间关联关系的正确性 )、非空约束(字段不能为空 )、检查约束(如客房价格必须大于 0 )等,以及使用事务处理(如客人入住时,同时更新客房状态和插入入住记录,要么都成功,要么都失败 )来保证数据一致性和完整性。
作用:防止数据库中出现无效、错误或不一致的数据,保证数据质量和业务逻辑的正确执行。
2.2.10 数据安全性与备份设计
内容:安全性方面,设置用户权限(不同用户角色有不同的数据访问和操作权限 )、加密敏感数据(如客人身份证号、信用卡信息等 );备份设计包括制定备份策略(全量备份、增量备份频率 )、选择备份存储位置(本地磁盘、云端存储等 ),定期进行备份操作。
作用:保护酒店数据不被非法访问、篡改和丢失,确保数据的可用性和保密性,在数据丢失或损坏时能恢复数据。