1、数据库技术课程设计(修订) 作者: 日期:10 个人收集整理 勿做商业用途客房管理系统数据库设计系 科: 管 理 信 息 系 专 业: 计算机软件技术 班 级: 软件3111 学 号: 0326111019 姓 名: 史平安 时 间: 2013年 6月 指导教师: 杨洋 客房管理系统数据库设计一、 设计的目的和意义二、 客房管理系统功能模块 1。数据录入功能 2。数据查询功能 3。数据统计功能三、 数据库设计 1。数据库与数据表设计 (1)个人信息表定义 (2)客房信息数据表定义 (3)客房类型数据表定义 2、数据完整性设计 (1)主键约束、非空值约束 (2)CHECK 约束 (3)使用缺省值
2、 (4)唯一约束 (5)外键约束 (6)规则 (7)标识列 3、视图、触发器和存储过程设计 (1)客人选择客房处理 (2)客人入住登记处理 (3) 客人离店退房处理 (4)统计某年份每月的客房销售数据客房管理系统数据库设计一、设计的目的和意义在当今经济和商务交往日益频繁的状况下,宾馆服务行当正面临客流量骤增的压力.越来越多的宾馆饭店都认识到传统的管理方法已经不能适合当今社会的需要,必须借助先进的计算机信息技术对宾馆服务进行管理。“客房管理系统”可以说是整个宾馆计算机信息管理系统的中心子系统,因为宾馆最主要的功能就是为旅客提供客房。设计客房管理系统数据库,可以涉及到大多数SQL Server数据
3、库的重要数据库对象、重要功能和特性,比如:视图、触发器和存储过程等.由此,通过这个课程设计可以加深对这些SQL Server数据库知识的学习、理解,积累在实际工程应用中运用各种数据库对象的经验。二、客房管理系统功能模块系统功能需求分析是数据库分析设计的前提,由于本设计为数据库设计,所以简化前期的需求分析,现将系统功能模块描述如下.1、 数据录入功能:在本系统中提供客人信息登记功能。可以录入客人的姓名、性别、年龄、身份证号码、 家庭住址、工作单位、来自地的地名、入住时间、预计入住天数、客房类别、客房号、离店时间以及缴纳押金金额等信息。在客人退房时,系统根据输入的离店时间以及客房单价自动计算客人住
4、宿费金额。2、数据查询功能系统需要提供以下查询功能:1) 查某类客房的入住情况及空房情况,显示所有该类客房空房数目和客房号。2) 根据客人姓名、来自地的地名、工作单位或家庭住址等信息查询客人信息;根据客房号查询入住客人的信息.3) 查询某个客人住宿费用情况,显示客人缴纳押金金额、实际入住天数、客房价格、实际住宿费、住宿费差额及余额等信息.4) 查询所有入住时间达到或超过预计入住天数的客人。3、数据统计功能1)统计一段时间内各类客房的入住情况。2)统计全年各月份的客房收入。3)统计一段时间内各类客房的入住率。三、数据库设计1、数据库与数据表设计分析前面的系统功能要求,需要一个表来存储和管理客人信
5、息,使系统能够接受客人入住时输入的各项数据,以实现数据录入、查询或统计客人信息等功能。客人是本系统的第一个实体。为了能实现查询和统计客房入住情况等功能,必须有一个表来存储和管理所有客房的信息,包括客房的类型、客房号、是否入住客人等。客房是本系统的第二个实体.一般来说,客房价格是以客房的类型来制定的.为了保证系统数据库最小的数据冗余和数据完整性,需要建立一个表来记录各种客房类型的信息。它主要为各种查询和统计功能提供客房价格数据.它与客房表是一对多的关系,在客房价格变动时,只需要在客房类型表中更改.综上所述,在客房管理数据库中需要建立3个数据表:客人信息数据表、客房信息数据表和客房类型数据表。(1
6、)客人信息数据表定义根据系统功能要求,客人信息表需要能接受客人登记入住和离店时输入的所有信息.还必须包括客人最终的住宿费金额,因为住宿费金额是统计客房收入的基本数据.客人信息表的结构定义如表1所示。表1 客人信息数据表定义 列名数据类型 大小 空 值 键 说明cIdint 4 主键(标识列) 序号cNamechar 8 姓名cSexbit 1 性别cAgetinyint 1 年龄cPNumchar 18 身份证号码cAddvarchar 50 家庭住址cWorkvarchar 50 工作单位cFromchar 10 来自地的地名cInTimesmalldatetime 4 入住时间cDayTi
7、nyint 1 预计入住天数rNumchar 5 客房号cOutTimesmalldatetime 4 离店时间cDepositsmallmoney 4 押金金额cCostsmallmoney 4 住宿费 其中,cId(序号)是表的主键,唯一标识一个入住的客人。设计时定义它为标识列,系统自动地产生连续的永不重复的序列号。 rNum(客房号)在客人信息表中是外键,它是客房信息表的主键,唯一标识一个房间.通过它,系统将引用到客房类型、客房单价等信息。 客人信息表取名为tblClient.(2)客房信息数据表定义客房信息表中应该记录每一个客房的信息和状态,系统查询这些信息并决定客人能否入住。每个客房
8、的类型决定了客房的价格,可供客人入住时选择房间及离店时结算住宿费用。客房数据表的定义如表2所示。表2 客房信息数据表定义列名数据类型 大 小 空 值 键 说明rNumrStatsrTypechar 5 主键 客房号char 1 客房状态char 2 客房类型编号 其中,rNum(客房号)是该表的主键,唯一标识一个客房房间。它将作为客人信息表的外键,保证客人信息表的参照完整性。 rStats 表示房间的状态,设定其值为“N”时,表示客房没有入住客人;值为“F”时,表示客房以有客人入住;值为“P”时,表示客房被预定. rType 表示客房的类型,它是该表的一个外键,来自下面将要说明的客房类型数据表
9、. 客房信息表取名为tblRoom.(3)客房类型数据表定义客房类型主要描述客房的服务标准和收费价格,这些信息如果包含进每个客房的记录中,将会使客房信息表产生较大的数据冗余,特别在客房数量大的情况下。此外,如果客房信息表的每条记录都包括价格信息,那当某种类型的客房价格变动时,用户就不得不对客房信息表中的记录逐一进行修改。客房类型数据表的定义如表33所示.表3-3 客房类型数据表定义列名数据类型 大 小 空 值 键 说明 rTyperNamerPricechar 2 主键 客房类型编号char 10 客房类型名称smallmoney 4 该类型客房价格其中,rType 表示客房类型的编号,作为该
10、表的主键,唯一标识某一类客房。它将作为客房信息表的外键,保证客房信息表数据的完整性.客房类型数据表取名为tblRoomType。2、数据完整性设计设计好表的结构后,需要根据实际应用和操作规则为表制定一系列约束和规则,从而达到保证数据完整性原则的目的。约束(1)主键约束、非空值约束在三个表的设计中已经规定了每个表的主键列、非空列,这些规定都是在实际应用环境中所必需的.比如tblRoom表中定义了房间号rNum为主键,则在表tblRoomr中Num必须是唯一的;客房类型Type和客房状态rStats 不能为空值,因为rType是辨别客人入住客房中类、住宿费用结算的依据,所以不能为空值;rStats
11、是辨别客人能否入住的依据,所以也不能为空值。(2)CHECK 约束对于tblClient表,应该建立一个检查约束,即所有客人的离店时间都不可能小于入住时间。(3)使用缺省值tblClient表的预住天数cDay的默认值可定义为1,而客人入住时间cInTime的缺省值应该就是添加客人记录的时间,所以可以设定缺省值为“(GETDATE)”。(4)唯一约束除了每个表的主键需定义为唯一外,对于tblRoomType的客房类型名rName,也应该定义为唯一的名称。因为在系统功能需求中,要求按客房类型对数据进行统计,如果在统计结果中只显示客房类型编号,用户就必须记忆那种类型是什么编号,这样很不直观。所以应
12、按照相关的SQL Server数据库教材中建立唯一约束的方法进行创建.(5)外键约束在数据表设计中已经讨论了各个表的外键,这里加以实现。(6)规则为了检查tblClinent表中输入的身份证号码cPNum是有效位数(我国身份证号码有旧的15位数字和18位数字两种),可以创建一个规则邦定到该列,在数据操作时进行检查.规则的定义语句为: (LEN(CardNum)=15) OR (LEN(CardNum)=18)具体实现请参见教材中的相关内容。(7)标识列在设计客人信息表tblClient时,我们把客人序号cId定义为标识列,使其在添加记录时自动产生序列号,并且每个序号唯一地标识一次客人入住信息。
13、3、视图、触发器和存储过程设计(1)客人选择客房处理客人来到饭店入住前要做的第一件事是选择合适的房间,客人将告知饭店服务员自己需要的客房类型,服务员在系统中选择指定的客房类型后系统将显示所有的空余的该类型房间,并显示该类型客房价格供客人参考选择。这个过程可以通过一个存储过程来实现。在这个存储过程中,需要的输入参数是客房类型,输出的结果集是所有这种客房类型的空房记录和价格。(2)客人入住登记处理客人入住登记操作完成后,入住的客房状态应该及时做相应的改变,并记录客人的序号供以后查询.这一功能可以使用触发器来自动进行:因为进行客人入住登记操作是在客人信息表tblClient中添加一条新的记录,所以可
14、以为tblClient设计一个Insert触发器,当tblClient执行Insert操作后自动更改tblRoom相应客房记录的数据.(3) 客人离店退房处理客人在离店退房时,服务员输入客人的退房时间,然后要计算出客人的住宿费用,以便于客人结帐。同时,系统应该将客人所退客房的状态更改为“空,以便于接待下一个客人入住。这一功能也可以通过一个触发器来实现。为tblClient表设计一个名为clientupdate的UPDATE触发器,当系统对tblClient的cOutTime(退房时间)进行UPDATE操作后,将会自动触发它。该触发器将自动取得当前所退房的单价,并根据客人入住天数计算出客人的住宿费用,把费用值写入cCost列,最后触发器将tb1Room相应客房记录的rStats更新,即将客房状态置为空房。(4)统计某年份每月的客房销售数据饭店管理人员常常需要比较一年中各个月份的客房销售收入,并把它制作成表格.实现这一功能可以使用一个存储过程,以输入一个年度作为参数,产生该年度12个月份的销售收入统计。定义该存储过程名为spMonthSum,输入参数为This Year。