资源描述
酒店管理系统
系别:信息管理系
班级:信息14005
姓名:江东流
学号:141
1. 需求描述
一家酒店有多个部门,每个部门拥有自己部门号、名称、部门经理、办公地点和一定数量职员。
每个职员有职员号,姓名,性别,年纪,工资,部门号,职务等属性。
每个用户有用户编号,姓名,年纪,性别,身份证号,等级等属性,身份证号必需填写且唯一;依据累计消费等路径,将用户分为不一样VIP等级,等级对应折扣等级。
酒店客房有不一样种类可供选择,由唯一客房号标识,位置统计每个房间位置,状态表示此房间此时状态,空闲、预约、有客等等。
相同类型客房价格一样,每个类型客房有一定总量,能够查询剩下数量以供选择。
酒店各部门还提供如KTV、网吧、洗衣等额外收费服务。不一样项目价格不一样。不一样项目在不一样地点进行。
酒店房间能够预约,每人天天只能预约一次,但能够数次更改之前预约内容。
付款时会产生唯一款项编号,每一笔款项由一个职员进行处理,依据折扣等级给出应收款和实际收款。
2. 概念结构设计
职员实体ER图
部门实体ER图
项目实体ER图
用户实体ER图
客房实体ER图
类型实体ER图
款项实体ER图
折扣实体ER图
全局ER图
3. 逻辑结构设计
职员(职员号,姓名,性别,年纪,工资,部门号,职务,备注);
部门(部门号,名称,部门经理,办公地点,职员数量);
款项(款项编号,用户号,职员号,时间,折扣等级,应收款,实际收款);
折扣(折扣等级,折扣情况);
项目(项目编号,项目名称,部门号,所在位置,收费标准);
选择(用户号,项目号,发生时间,备注);
用户(用户编号,姓名,年纪,性别,身份证号,等级,备注);
客房(客房号,类型编号,位置,状态,备注);
类型(类型编号,类型名称,费用,总量,剩下量);
预约(用户号,客房号,预约时间,备注)
住宿(用户号,客房号,入住时间,离开时间);
职员表:
列名
数据类型
约束条件
职员号
Char(10)
主码
姓名
Char(10)
非空
性别
Char(2)
非空
年纪
Int
工资
Int
部门号
Char(10)
外码,参考部门表中部门号
职务
Char(10)
备注
Varchar(100)
部门表:
列名
数据类型
约束条件
部门号
Char(10)
主码
名称
Char(20)
非空
部门经理
Char(10)
外码,参考职员表中姓名
办公地点
Char(10)
职员数量
Int
大于等于0
款项表:
列名
数据类型
约束条件
款项编号
Char(10)
主码
用户号
Char(10)
外码,参考料客表用户号
职员号
Char(10)
外码,参考职员表职员号
时间
Datetime
折扣等级
Int
外码,参考折扣表折扣等级
应收款
Dec(6,2)
非空
实际收款
Dec(6,2)
非空
折扣表:
列名
数据类型
约束条件
折扣等级
Int
主码
折扣情况
Dec(3,2)
项目表:
列名
数据类型
约束条件
项目编号
Char(10)
主码
项目名称
Char(10)
非空
部门号
Char(10)
外码,参考部门表部门号
所在位置
Char(10)
收费标准
Int
大于等于0
选择表:
列名
数据类型
约束条件
用户号
Char(10)
联合主码;外码,参考料客表用户号
项目号
Char(10)
联合主码;外码,参考项目表项目编号
发生时间
Datetime
联合主码
备注
Varchar(100)
用户表:
列名
数据类型
约束条件
用户编号
Char(10)
主码
姓名
Char(10)
非空
年纪
Char(2)
性别
Char(2)
非空
身份证号
Char(18)
非空;唯一
等级
Int
备注
Varchar(100)
客房表:
列名
数据类型
约束条件
客房号
Char(10)
主码
类型编号
Char(10)
外码,参考类型表类型编号
位置
Char(10)
非空,唯一
状态
Char(4)
备注
Varchar(100)
类型表:
列名
数据类型
约束条件
类型编号
Char(10)
主码
类型名称
Char(10)
非空
费用
Dec(6,2)
大于等于0
总量
Int
大于等于0
剩下量
Int
大于等于0
预约表:
列名
数据类型
约束条件
用户号
Char(10)
联合主码;外码,参考料客表用户号
客房号
Char(10)
联合主码;外码,参考客房表客房号
预约时间
Datetime
联合主码
备注
Varchar(100)
住宿表:
列名
数据类型
约束条件
用户号
Char(10)
联合主码;外码,参考料客表用户号
客房号
Char(10)
联合主码;外码,参考客房表客房号
入住时间
Datetime
联合主码
离开时间
Datetime
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','一般职员','')
('yg','陈啸','男',30,3500,'bm002','部门经理','')
('yg','穆标','男',26,,'bm002','一般职员','学徒')
('yg3001','胡展鹏','男',31,4000,'bm003','部门经理','')
('yg3002','戚倩倩','女',25,3000,'bm003','一般职员','休假中')
添加用户数据:
('gk00001','董炎鑫',24,'男','3208305',3,'')
('gk00002','李伦',20,'女','342603',1,'')
('gk00003','杨德军',31,'男','231',1,'')
('gk00004','张秀春',41,'女','3208293',2,'')
添加类型数据:
('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,0.98)
(2,0.9)
(3,0.8)
添加项目数据:
('xm001','网吧','bm003','A206',3)
('xm002','KTV','bm003','A501',90)
('xm003','洗衣','bm001','B105',10)
款项、选择、预约数据随业务进行由职员添加
模拟业务
实例1:
新用户沈慧预约kf003号客房(沈慧,女,20岁,0211546)
insert into 用户 values (‘gk00005’,’沈慧’,20,’女’,’0211546’,1,’’) go
insert into 预约 values (‘gk00005’,’kf003’,’-12-06’,’’)
update 客房 set 状态=’预约’ where 客房号=’kf003’
实例2:
职员徐博雅离职,删除其职员数据
delete from 职员 where 姓名=’徐博雅’
实例3:
查询年纪小于等于30岁男性用户姓名、身份证号
select 姓名,身份证号
from 用户
where 性别=’男’ and 年纪<=30
实例4:
用户李伦选择KTV项目(李伦,342603)
insert into 选择 select 用户号,项目编号,'-12-1',''
from 用户,项目
where 身份证号='342603' and 项目名称='KTV'
go
select *
from 选择
where 用户号=(select 用户号 from 用户 where 身份证号='342603')
and 项目号=(select 项目编号 from 项目 where 项目名称='KTV')
and 发生时间='-12-1'
实例5:
即实例4以后,李伦结账付款,由职员戚倩倩处理
insert into 款项 select ‘kx00001’,用户号,职员号,'-12-1',折扣等级,收费标准,收费标准*折扣详情
from 用户,项目,职员,折扣
where 身份证号='342603' 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点一次差异备份,每两小时一次事务日志备份
首先实施一次完整备份,不然接下来到周日数据无法进行备份:
在创建一个“清除维护”任务,删除时间超出30天备份文件
展开阅读全文