SQL数据库作业酒店管理.docx
《SQL数据库作业酒店管理.docx》由会员分享,可在线阅读,更多相关《SQL数据库作业酒店管理.docx(22页珍藏版)》请在冰豆网上搜索。
SQL数据库作业酒店管理
题目酒店管理系统的数据库设计
班级09机械(3班)
姓名
学号
教师
酒店管理系统的数据库设计
酒店业是一个前景广阔而又竞争激烈的行业。
改革开放以来,我国的酒店业迅速发展,已经成为一个具有相当规模的产业。
由于我国的旅游业迅速发展,通过调查,我国在2020年将成为世界上第四大旅游国家;同时我国加入世界贸易组织,酒店业将完全开放,这个时候,我国的酒店业将面临着前所未有的机遇和挑战。
酒店行业的激烈竞争使得争取客源、提高酒店满员率、指定正确的销售策略已经成为一项重要的任务,而借助于当前蓬勃发展的IT工具来拓展销售能力,创造客观的经济效益已经成为许多酒店的首选。
因为酒店业务涉及的各个工作环节已经不再仅仅是传统的住宿、结算业务,而是更广更全面的服务性行业代表。
酒店作为一个服务性行业,从客房的营销即客人的预计开始,从入住登记直到最后退房结账,整个过程应该能够以宾客为中心,提供快捷方便的服务,给宾客一种顾客至上的享受,只有提高酒店的管理水平,简单化各种复杂的操作,在最合理的最短的时间内完成酒店业务的规范操作,这样才能令旅客舒适难忘,面对酒店业内激烈的竞争形势,各酒店均在努力拓展服务领域的广度和深度。
虽然信息化并不是酒店走向成功的关键元素,但它可以帮助那些真正影响成败的要素发挥更大的效用。
因此采用全新的计算机网络和管理系统,将成为提高酒店的管理效率,改善服务水准的重要手段之一。
所以作为一有效的统计分析手段,计算机管理系统具有明显的优势,它在数据保存、数据交换等方面均能做到快速可靠,是手工操作所不能完成的。
现利用SQLServer2008设计一个简单的酒店管理系统的数据库。
1、对酒店系统进行系统功能需求分析
系统流程图
2、数据库设计
根据系统的功能要求,主要构造以下几个表:
(1)“楼层信息”表:
楼层编号、楼层名称。
用途是保存楼层编号及名称,如表1所示
表1.“楼层信息”表
CREATETABLE[dbo].[楼层信息](
[楼层编号][int]NOTNULL,
[楼层名称][varchar](50)NULL
)ON[PRIMARY]
GO
(2)“客房类型”表:
类型编号、类型名称、价格、拼房价格、可超预订数、是否可以拼房。
用途是保存客房类型信息,如表2所示
表2.“客房类型”表
CREATETABLE[dbo].[客房类型](
[类型编号][varchar](5)NOTNULL,
[类型名称][varchar](50)NULL,
[价格][money]NULL,
[拼房价格][money]NULL,
[可超预定数][decimal](5,0)NULL,
[是否可拼房][bit]NULL,
CONSTRAINT[PK_客房类型]PRIMARYKEYCLUSTERED
(
[类型编号]ASC
)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]
)ON[PRIMARY]
GO
(3)“客房信息”表:
客房编号、类型编号、楼层编号、额度人数、床数、客房描述、备注、状态、是否可以拼房。
用途是保存酒店所有客房信息,如表3所示
表3.“客房信息”表
CREATETABLE[dbo].[客房信息](
[客房编号][varchar](50)NOTNULL,
[类型编号][varchar](5)NOTNULL,
[楼层编号][int]NOTNULL,
[额定人数][int]NULL,
[床数][int]NULL,
[客房描述][varchar](50)NULL,
[状态][varchar](5)NULL,
[是否可拼房][bit]NULL
)ON[PRIMARY]
GO
(4)“预订单”表:
预订单号、会员编号、客房类型、抵店时间等。
用途是散客订房间时使用,如表4所示
表4.“预订单”表
CREATETABLE[dbo].[预订单](
[预定单号][varchar](50)NOTNULL,
[会员编号][int]NULL,
[客房类型][varchar](4)NOTNULL,
[抵店时间][smalldatetime]NOTNULL,
[离店时间][smalldatetime]NULL,
[单据状态][varchar](20)NULL,
[入住人数][int]NULL,
[客房编号][varchar](10)NULL,
[客房价格][money]NULL,
[入住价格][money]NULL,
[折扣][decimal](4,2)NULL,
[是否加床][bit]NULL,
[加床价格][money]NULL,
[预收款][money]NULL,
[预订人][varchar](20)NULL,
[联系电话][varchar](50)NULL,
[操作员][varchar](10)NULL,
[业务员][varchar](50)NULL
)ON[PRIMARY]
GO
(5)“预订单历史”表:
预订单号、会员编号、客房类型、抵店时间、离店时间、单据状态。
用途是将预订单转入到入住单后,将预订单清除并导入到预订单历史。
(6)“入住单”表:
入住单号、订单编号、会员编号、客房类型、抵店时间等。
用途是散客入住酒店时,信息可由预订单转入,如表6所示
表6.“入住单”表
CREATETABLE[dbo].[入住单](
[入住单号][varchar](36)NOTNULL,
[预定单号][varchar](50)NULL,
[会员编号][int]NOTNULL,
[客房类型][varchar](5)NULL,
[抵店时间][smalldatetime]NULL,
[离店时间][smalldatetime]NULL,
[单据状态][varchar](50)NULL,
[入住人数][int]NULL,
[客房编号][varchar](20)NULL,
[客房价格][money]NULL,
[折扣][decimal](4,2)NULL,
[是否加床][bit]NULL,
[预收款][money]NULL,
[预订人][varchar](50)NULL,
[联系电话][varchar](50)NULL,
[操作员][varchar](50)NULL,
[业务员][varchar](50)NULL,
[早餐][bit]NULL,
[叫醒][bit]NULL,
[保密][bit]NULL
)ON[PRIMARY]
GO
(7)“入住单历史”表:
入住单号、订单编号、会员编号、客房类型、抵店时间等。
用途是入住单在收银结账后清除,并导入到入住单历史,如表7所示
表7.“入住单历史”表
CREATETABLE[dbo].[入住单历史](
[入住单号][varchar](30)NULL,
[预定单号][varchar](30)NULL,
[会员编号][int]NULL,
[客房类型][varchar](5)NULL,
[抵店时间][smalldatetime]NULL,
[离店时间][smalldatetime]NULL,
[单据状态][varchar](50)NULL,
[入住人数][int]NULL,
[客房编号][varchar](20)NULL,
[客房价格][money]NULL
)ON[PRIMARY]
GO
(8)“账单明细”表:
账单编号、入住单号、消费内容、消费金额、消费时间、备注。
用途是查询客户消费的明细单,如表8所示
表8.“账单明细”表
CREATETABLE[dbo].[账单明细](
[账单编号][int]NOTNULL,
[入住单号][varchar](50)NULL,
[消费内容][varchar](50)NULL,
[消费金额][money]NULL,
[消费时间][smalldatetime]NULL,
[备注][varchar](100)NULL
)ON[PRIMARY]
GO
(9)“账单明细历史”表:
账单编号、入住单号、消费内容、消费金额、消费时间、备注。
用途是收银结账后,账单明细导入到账单明细历史,如表9所示
表9.“账单明细历史”表
CREATETABLE[dbo].[账单明细历史](
[账单编号][int]NOTNULL,
[入住单号][varchar](50)NULL,
[消费内容][varchar](50)NULL,
[消费金额][money]NULL,
[消费时间][smalldatetime]NULL
)ON[PRIMARY]
GO
以上8个表可以简略地描述出酒店管理信息系统数据库的设计。
表中出现的数据类型含义如下:
int是一种存储整型数据的数值型数据类型,存储范围在-2^63至2^63之间,占用4个字节的储存空间。
bit是用于存储0和1值的数据类型,该类型的数据列只能存储0或1中的一个,适合用于存储需要标识“是”或“否”两种状态的数据。
money是用于储存范围在(-922337203685477.5808)~(922337203685477.5808)之间的币值数据,精度为币值单位的万分之一,占用8个字节的存储空间。
但是该数据类型中存储的数据并不包括货币符号。
smalldatatime与datatime类似,但数值范围小,其范围为1900年1月1日至2079年6月6日,占用的存储空间为4字节。
varchar(n)是一种比char更加灵活的数据类型,同样用于表示字符数据,但是varchar可以保存可变长度的字符串。
其中n代表该数据类型所允许保存的字符串的最大长度,只要长度小于该最大值的字符串都可以被保存在该数据类型中。
因此,对于那些难以估计确切长度的数据对象来说,使用varchar数据类型更加明智。
3、分析数据完整性
在SQL中,数据完整性有以下几种
1)域完整性:
又称列完整性,指定列的数据输入是否具有正确的数据类型、格式以及有效的数据范围
2)实体完整性:
又称行完整性。
这里的实体是指表中的记录,一个实体就是表的一条记录。
实体完整性要求在表中不能存在完全相同的记录,而且每条记录都要有一个非空且不重复的主键。
实体的完整性可通过建立主键约束、唯一约束、标识列、唯一索引等措施来实现。
3)参照完整性:
又称为引用完整性(关系完整性),以保证主表中的数据与从表中的数据的一致性,关系完整性是通过定义外键与主键之间或外键与唯一键之间的对应关系实现的。
约束包括以下几种类型:
PROMARYKEY约束FOREIGNKEY约束NOTNULL约束
UNIQUE约束DEFAULT约束CHECK约束
主键约束
表中常有一列或列的组合,其值能唯一标识表中的每一行,这样的一列或列的组合称为表的主键。
通过主键可以强制表的实体完整性。
定义了主键约束的列具有以下特点:
每一个表只能定义一个主键
主键值不可空(NULL)
主键值不可重复,若主键是由多列组成,某列上的值可以重复,但多列的组合值必须是唯一的。
定义和删除主键的方法:
1、使用表设计器操作
例如:
对入住单号进行主键设置
2、使用T-SQL语句定义主键约束
CONSTRAINT[PK_入住单]PRIMARYKEYCLUSTERED
(
[入住单号]ASC
)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,
ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]
)ON[PRIMARY]
默认值约束
若表中某列定义了默认(DEFAULT)约束,如果用户在输入数据时,没有为该列指定数据,那么系统将默认值赋给该列,默认值约束保证了域完整性。
唯一约束
如果要确保一个表中的非主键列不输入重复值,应在该列上定义唯一约束(UNIQUE约束)。
使用唯一约束和主键约束均不允许表中对应字段存在重复值,二者可以实现实体完整性,但它们之间以下区别:
一个表只能定义一个主键约束,但可根据需要对不同的列定义若干个唯一约束
主键约束字段的值不允许为NULL,而唯一约束字段的值可为NULL
一般定义主键约束时,系统会自动建立索引,索引的默认类型为聚族索引;定义唯一约束时,系统会自动建立一个非聚族索引。
例如:
对“预订单”创建一个名称为“预定单1”的唯一约束
CONSTRAINT[预订单1]UNIQUENONCLUSTERED
(
[预定单号]ASC
)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,
ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]
检查约束
检查(CHECK)约束用于限制输入到一列或多列的值的范围,从逻辑表达式判断数据的有效性,也就是说一个字段的输入内容必须满足CHECK约束约束的条件,否则,数据无法正常输入,从而保证数据的域的完整性
例如:
对“入住单”创建检查约束
外键约束
一个数据库中可能包含多个表,可以通过外键(FOREIGNKEY)使这些表关联起来,外键是由表中一列或多列组成的。
例如在A表中有一个字段的取值只能是B表中某字段的取值之一,则在A表该字段上创建外键约束,A表称为从表,B表称为主表。
定义外键约束的列有以下特点:
外键的取值可以为空(NULL)
外键的取值可以重复,但必须是它所引用列(主表中)的取值之一。
引用列必须是定义了主键约束或唯一约束的列。
4、数据表图形
输入相应的数据后的入住单:
5、数据库安全管理
由于软件和网络存在漏洞,对于酒店管理信息系统我们必须采取有效的安全管理措施。
数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄漏、更改或破坏。
系统安全保护措施是否有效是数据库系统的主要指标之一。
数据库的安全性和计算机系统的安全性(包括操作系统、网络系统的安全性)是紧密联系、相互支持的。
随着越来越多的网络相互连接,安全性也变得日益重要。
公司的资产必须受到保护,尤其是数据库,它们存储着公司的宝贵信息。
安全是数据引擎的关键特性之一,保护企业免受各种威胁。
SQLServer2008安全特性的宗旨是使其更加安全,且使数据保护人员能够更方便地使用和理解安全。
在SQLServer2008中,为了保证数据的安全性,需要做到以下几方面工作:
1、选择合理的数据库架构;
2、对数据库系统进行合理的配置和权限设置;
3、经常对数据库中的数据进行及时备份与恢复;
对于数据库管理来说,保护数据不受内部和外部侵害是一项重要的工作。
SQLServer2008的身份验证、授权和验证机制可以保护数据免受XX的泄漏和篡改。
SQLServer的安全机制一般主要包括三个等级:
1服务器级别的安全机制
这个级别的安全性主要通过登录帐户进行控制,要想访问一个数据库服务器,必须拥有一个登录帐户。
登录帐户可以是Windows账户或组,也可以是SQLServer的登录账户。
登录账户可以属于相应的服务器角色。
至于角色,可以理解为权限的组合。
2数据库级别的安全机制
这个级别的安全性主要通过用户帐户进行控制,要想访问一个数据库,必须拥有该数据库的一个用户账户身份。
用户账户是通过登录账户进行映射的,可以属于固定的数据库角色或自定义数据库角色。
3数据对象级别的安全机制
这个级别的安全性通过设置数据对象的访问权限进行控制。
如果是使用图形界面管理工具,可以在表上右击,选择【属性】|【权限】选项,然后启用相应的权限复选框即可。
以上的每个等级就好像一道门,如果门没有上锁,或者用户拥有开门的钥匙,则用户可以通过这道门达到下一个安全等级。
如果通过了所有的门,则用户就可以实现对数据的访问。
这种关系可以用图1来表示。
图1SQLServer2008的安全性等级
SQLServer2008提供了Windows身份和混合身份两种验证模式,每一种身份验证都有一个不同类型的登录账户。
无论哪种模式,SQLServer2008都需要对用户的访问进行两个阶段的检验:
验证阶段和许可确认阶段。
1验证阶段用户在SQLServer2008获得对任何数据库的访问权限之前,必须登录到SQLServer上,并且被认为是合法的。
SQLServer或者Windows要求对用户进行验证。
如果验证通过,用户就可以连接到SQLServer2008上;否则,服务器将拒绝用户登录
2许可确认阶段用户验证通过后会登录到SQLServer2008上,此时系统将检查用户是否有访问服务器上数据的权限。
1.Windows身份验证
使用Windows身份验证模式是默认的身份验证模式,它比混合模式要安全得多。
当数据库仅在内部访问时使用Windows身份验证模式可以获得最佳工作效率。
在使用Windows身份验证模式时,可以使用Windows域中有效的用户和组账户来进行身份验证。
这种模式下,域用户不需要独立的SQLServer用户账户和密码就可以访问数据库。
这对于普通用户来说是非常有益的,因为这意味着域用户不需记住多个密码。
如果用户更新了自己的域密码,也不必更改SQLServer2008的密码。
但是,在该模式下用户仍然要遵从Windows安全模式的所有规则,并可以用这种模式去锁定账户、审核登录和迫使用户周期性地更改登录密码。
当用户通过Windows用户帐户连接时,SQLServer使用操作系统中的Windows主体标记验证帐户名和密码。
也就是说,用户身份由Windows进行确认。
SQLServer不要求提供密码,也不执行身份验证。
图2所示,就是本地账户启用SQLServerManage-mentStudio窗口是,使用操作系统中的Windows主体标记进行的连接。
图2Windows身份验证模式
其中,服务器名称中MR代表当前计算机名称,Administrator是指登录该计算机时使用的Windows账户名称。
这也是SQLServer默认的身份验证模式,并且比SQLServer身份验证更为安全。
Windows身份验证使用Kerberos安全协议,提供有关强密码复杂性验证的密码策略强制,还提供帐户锁定支持,并且支持密码过期。
通过Windows身份验证完成的连接有时也称为可信连接,这是因为SQLServer信任由Windows提供的凭据。
Windows省份验证模式有以下主要优点:
1)数据库管理员的工作可以集中在管理数据库上面,而不是管理用户账户。
对用户账户的管理可以交给Windows去完成。
2)Windows有更强的用户账户管理工具。
可以设置账户锁定、密码期限等。
如果不通过定制来扩展SQLServer,SQLServer则不具备这些功能。
3)Windows的组策略支持多个用户同时被授权访问SQLServer。
2.混合模式
使用混合安全的身份验证模式,可以同时使用Windows身份验证和SQLServer登录。
SQLServer登录主要用于外部的用户,例如那些可能从Internet访问数据库的用户。
可以配置从Internet访问SQLServer2008的应用程序以自动地使用指定的账户或提示用户输入有效的SQLServer用户账户和密码。
使用混合安全模式,SQLServer2008首先确定用户的连接是否使用有效的SQLServer用户账户登录。
如果用户有有效的登录和使用正确的密码,则接受用户的连接;如果用户有有效的登录,但是使用不正确的密码,则用户的连接被拒绝。
仅当用户没有有效的登录时,SQLServer2008才检查Windows账户的信息。
在这种情况下,SQLServer2008将会确定Windows账户是否有连接到服务器的权限。
如果账户有权限,连接被接受;否则,连接被拒绝。
当使用混合模式身份验证时,在SQLServer中创建的登录名并不基于Windows用户帐户。
用户名和密码均通过使用SQLServer创建并存储在SQLServer中。
通过混合模式身份验证进行连接的用户每次连接时必须提供其凭据(登录名和密码)。
当使用混合模式身份验证时,必须为所有SQLServer帐户设置强密码。
图3所示,就是选择混合模式身份验证的登录界面。
图3使用SQLServer身份验证
如果用户是具有Windows登录名和密码的Windows域用户,则还必须提供另一个用于连接的(SQLServer)登录名和密码。
记住多个登录名和密码对于许多用户而言都较为困难。
每次连接到数据库时都必须提供SQLServer凭据也十分繁琐。
混合模式身份验证的优点如下。
1)允许SQLServer支持那些需要进行SQLServer身份验证的旧版应用程序和由第三方提供的应用程序。
2)允许SQLServer支持具有混合操作系统的环境,在这种环境中并不是所有用户均由Windows域进行验证。
3)允许用户从未知的或不可信的域进行连接。
例如,既定客户使用指定的SQLServer登录名进行连接以接收其订单状态的应用程序。
4)允许SQLServer支持基于Web的应用程序,在这些应用程序中用户可创建自己的标识。
允许软件开发人员通过使用基于已知的预设SQLServer登录名的复杂权限层次结构来分发应用程序。
经过以上的分析,我们可以采取Windows身份验证、及时对数据库备份等措施,加强对数据库的安全管理,确保数据的完整性,不让顾客因我们酒店管理系统的缺陷而遭受损失。
6、感想
通过对以上酒店管理信息系统数据库的设计,我更加熟悉了对SQLServer2008的运用,对这方面的知识也有了更深一步的理解。
但是也存在很多不足之处,例如对系统的设计,分析实际问题的能力不够强,还有待在以后的学习实践中慢慢提高。