数据库项目酒店管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
酒店管理系统
系别:信息管理系
班级:信息14005
姓名:江东流
1. 需求描述
一家酒店有多个部门,每个部门拥有自己的部门号、名称、部门经理、
办公地点和一定数量员工。
每个员工有员工号,姓名,性别,年龄,工资,部门号,职务等属性。
每个顾客有顾客编号,姓名,年龄,性别,身份证号,级别等属性,身
份证号必须填写且唯一;根据累计消费等途径,将顾客分为不同的VIP等级,
级别对应折扣级别。
酒店的客房有不同的种类可供选择,由唯一的客房号标识,位置记录每
个房间的位置,状态表示此房间此时的状态,空闲、预约、有客等等。
相同类型的客房价格一样,每个类型的客房有一定的总量,可以查询剩
余的数量以供选择。
酒店各部门还提供如KTV、网吧、洗衣等额外收费服务。
不同项目价格
不同。
不同项目在不同地点进行。
酒店房间可以预约,每人每天只能预约一次,但可以多次更改之前的预
约内容。
付款时会产生唯一的款项编号,每一笔款项由一个员工进行处理,根据
折扣级别给出应收款和实际收款。
2. 概念结构设计
员工实体ER图
部门实体ER图
项目实体ER图
顾客实体ER图
客房实体ER图
类型实体ER图
款项实体ER图
折扣实体ER图
全局ER图
3. 逻辑结构设计
员工(员工号,姓名,性别,年龄,工资,部门号,职务,备注);
部门(部门号,名称,部门经理,办公地点,员工数量);
款项(款项编号,顾客号,员工号,时间,折扣级别,应收款,实际收款);
折扣(折扣级别,折扣情况);
项目(项目编号,项目名称,部门号,所在位置,收费标准);
选择(顾客号,项目号,发生时间,备注);
顾客(顾客编号,姓名,年龄,性别,身份证号,级别,备注);
客房(客房号,类型编号,位置,状态,备注);
类型(类型编号,类型名称,费用,总量,剩余量);
预约(顾客号,客房号,预约时间,备注)
住宿(顾客号,客房号,入住时间,离开时间);
员工表:
款项表:
折扣表:
项目表:
选择表:
客房表:
类型表:
预约表:
住宿表:
4. 物理设计
员工会经常查询自己的工资,在员工表的(工资)创建索引;
顾客每次付款时都会要查询具体的折扣详情,在折扣表的(折扣详情)创建索引;
顾客选择项目时只会给出项目名称,所以需要经常查询项目名称,在项目表的(项目名称)创建索引;
每位顾客消费时会给出身份证,所以经常需要查询身份证对应的顾客号,在顾客表的(身份证号)创建索引;
顾客住宿时会给出自己想要的客房类型的名称,所以要经常查询类型名称对应的类型号,在类型表的(类型名称)创建索引;
SQL语句
create unique index idx_工资on 员工(工资)
create unique index idx_折扣详情on 折扣(折扣详情)
create unique index idx_项目名称on 项目(项目名称)
create unique index idx_身份证号on 顾客(身份证号)
create unique index idx_类型名称on 类型(类型名称)
5. 数据库实施
--创建数据库
create database 酒店管理系统
go
use 酒店管理系统
go
--创建表
--创建部门表
create table 部门(
部门号 char(10) primary key,
名称 char(10) not null,
部门经理 char(10),
办公地点 char(10),
员工数量 int check(员工数量>=0),
)
go
--创建员工表
create table 员工(
员工号 char(10) primary key,
姓名 char(10) not null,
性别 char(2) not null,
年龄 int,
工资 int,
部门号 char(10),
职务 char(10),
备注 varchar(100),
foreign key (部门号) references 部门(部门号)
)
go
--创建顾客表
create table 顾客(
顾客号 char(10) primary key,
姓名 char(10) not null,
年龄 char(2),
性别 char(2) not null,
身份证号 char(18) not null unique,
级别 int,
备注 varchar(100)
)
go
--创建类型表
create table 类型(
类型编号 char(10) primary key,
类型名称 char(10) not null,
费用 dec(6,2) check(费用>=0),
总量 int check(总量>=0),
剩余量 int check(剩余量>=0)
)
go
--创建客房表
create table 客房(
客房号 char(10) primary key,
类型编号 char(10),
位置 char(10) not null unique,
状态 char(4),
备注 varchar(100),
foreign key (类型编号) references 类型(类型编号) )
go
--折扣表
create table 折扣(
折扣级别 int primary key,
折扣详情 dec(3,2)
)
go
--创建款项表
create table 款项(
款项编号 char(10) primary key,
顾客号 char(10),
员工号 char(10),
时间 datetime,
折扣级别 int,
应收款 dec(6,2) not null,
实际收款 dec(6,2) not null,
foreign key (顾客号) references 顾客(顾客号), foreign key (员工号) references 员工(员工号), foreign key (折扣级别)references 折扣(折扣级别) )
go
--创建项目表
create table 项目(
项目编号 char(10) primary key,
项目名称 char(10) not null,
部门号 char(10),
所在位置 char(10),
收费标准 int check(收费标准>=0),
foreign key (部门号) references 部门(部门号)
)
go
--创建选择表
create table 选择(
顾客号 char(10),
项目号 char(10),
发生时间 datetime,
备注 varchar(100),
primary key(顾客号,项目号,发生时间),
foreign key (顾客号) references 顾客(顾客号), foreign key (项目号) references 项目(项目编号) )
go
--创建预约表
create table 预约(
顾客号 char(10),
客房号 char(10),
预约时间 datetime,
备注 varchar(100),
primary key(顾客号,客房号,预约时间),
foreign key (顾客号) references 顾客(顾客号),
foreign key (客房号) references 客房(客房号)
)
go
--创建住宿表
create table 住宿(
顾客号 char(10),
客房号 char(10),
入住时间 datetime,
离开时间 datetime,
primary key(顾客号,客房号,入住时间),
foreign key (顾客号) references 顾客(顾客号),
foreign key (客房号) references 客房(客房号)
)
6. 数据库运行
添加部门数据:
('bm001','客房部','吴庆宇','B201',20)
('bm002','餐饮部','陈啸','A103',10)
('bm003','娱乐部','胡展鹏','A401',20)
添加员工数据:
('yg1001','吴庆宇','男',30,4000,'bm001','部门经理','')
('yg1002','徐博雅','女',26,2700,'bm001','普通员工','')
('yg2001','陈啸','男',30,3500,'bm002','部门经理','')
('yg2002','穆标','男',26,2000,'bm002','普通员工','学徒')
('yg3001','胡展鹏','男',31,4000,'bm003','部门经理','')
('yg3002','戚倩倩','女',25,3000,'bm003','普通员工','休假中') 添加顾客数据:
('gk00001','董炎鑫',24,'男,'')
('gk00002','李伦',20,'女,'')
('gk00003','杨德军',31,'男,'')
('gk00004','张秀春',41,'女,'')
添加类型数据:
('lx001','普通双人间',130,50,20)
('lx002','网络单人间',100,30,13)
('lx003','大床房',150,50,36)
('lx004','豪华套间',420,20,14)
添加客房数据:
('kf001','lx001','B101','空闲','')
('kf002','lx001','B102','有客','')
('kf003','lx002','B201','空闲','')
('kf004','lx003','B305','空闲','维修中')
('kf005','lx004','B404','有客','')
添加折扣数据:
(1,
(2,
(3,
添加项目数据:
('xm001','网吧','bm003','A206',3)
('xm002','KTV','bm003','A501',90)
('xm003','洗衣','bm001','B105',10)
款项、选择、预约数据随业务的进行由员工添加模拟业务
实例1:
新客户沈慧预约kf003
insert into 顾客values (‘gk00005’,’沈慧’,20,’女’,’’,1,’’) go
insert into 预约values (‘gk00005’,’kf003’,’2015-12-06’,’’)
update 客房set 状态=’预约’ where 客房号=’kf003’
实例2:
员工徐博雅离职,删除其员工数据
delete from 员工where 姓名=’徐博雅’
实例3:
查询年龄小于等于30岁的男性顾客的姓名、身份证号
select 姓名,身份证号
from 顾客
where 性别=’男’ and 年龄<=30
实例4:
insert into 选择select 顾客号,项目编号,'2015-12-1',''
from 顾客,项目
go
select *
from 选择
and 项目号=(select 项目编号from 项目where 项目名称='KTV')
and 发生时间='2015-12-1'
实例5:
即实例4之后,李伦结账付款,由员工戚倩倩处理
insert into 款项select ‘kx00001’,顾客号,员工号,'2015-12-1',折扣级别,收费标准,收费标准*折扣详情
from 顾客,项目,员工,折扣
where 身份证号and 项目名称='KTV' and 员工.姓名=’戚倩倩’ and 级别=折扣级别
go
select *
from 款项
where 款项编号='kx00001'
7. 数据库安全性
①数据库管理员以Windows身份验证登录,不再另外创建登录名
为员工、经理和顾客分别创建一个登录名,例如:
②为员工、经理和顾客分别创建一个用户,对应登录名,例如:
③授予权限
授予顾客,对项目表和类型表的查询权限
grant select on 项目to 顾客
grant select on 类型to 顾客
授予员工,对员工表的查、对款项表的增查、对选择表、顾客表、客房表、预约表、住宿表的增删改查、对类型表的改查权限
grant select on 员工to 员工
grant insert,select on 款项to 员工
grant insert,delete,update,select on 选择to 员工
grant insert,delete,update,select on 顾客to 员工
grant insert,delete,update,select on 客房to 员工
grant insert,delete,update,select on 预约to 员工
grant insert,delete,update,select on 住宿to 员工
grant update,select on 类型to 员工
授予经理,对员工表的增删改查、对部门表增删改查、对项目表的增删改查权限
grant insert,delete,update,select on 员工to 经理
grant insert,delete,update,select on 部门to 经理
grant insert,delete,update,select on 项目to 经理
8. 数据库备份计划
每周日24点一次完整备份,每天24点一次差异备份,每两小时一次事务日志备份
首先执行一次完整备份,否则接下来到周日的数据无法进行备份:
在创建一个“清除维护”任务,删除时间超过一个月的备份文件。