阅读下列说明,回答问题1至问题3,将解答填入的对应栏内。
[说明]
M公司为某宾馆设计宾馆机票预订系统,初步的需求分析结果如下:
(1)客户可以在提前预订或直接入住时向宾馆提供相关信息,宾馆登记的客户信息.包括:客户编号,姓名,性别,类型,身份证号,联系方式,预订日期,入住时间和离开时间等信息。其中类型字段说明客户是普通客户或VIP客户,不同的客户类型享受订票的折扣额度不同。直接入住的客户其预订日期取空值。
(2)需要预订机票的客户应填写“机票预订”表,提供飞行日期、航班号、出发时间、目的地等信息。宾馆根据客户订票信息购票后,生成“客户订单”表,并根据客户类型确定相应的折扣额度。“机票预订”和“客户订单”表如下表1、表2所示。
表2 “客户订单”示例
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
根据需求阶段收集的信息,设计的关系模式如下图所示。
关系模式的主要属性、含义及约束如下表3所示。
[问题1] 对关系“客户”,请回答以下的问题: (1)若选定(客户编号,预订日期)作为主码,未预订而直接入住的客户信息能否录入客户表 如不能,请说明原因。 (2)对“客户”关系增加一个流水号属性作为主码,“客户”关系属于第几范式 还存在哪些问题 (3)将增加入住标识属性后的“客户”关系分解为第三范式,分解后的关系名依次取客户1、客户2、…。 |
参考答案:
解析:(1)不能,因为预订日期是主属性,直接入住客户的预订日期应该取空值,这违反实体完整性约束,记录无法插入到客户表。
(2)“客户”关系属于2NF,存在数据冗余等问题。若某一客户有多次预订及入住信息,则其姓名等信息将重复多次。
(3)“客户”分解为第三范式如下所示:
[分析]: (1)若选定(客户编号,预订日期)作为主码,未预订而直接入住的客户信息是不能记入客户表的。因为预订日期是主属性,直接入住客户的预订日期应该取空值,这违反实体完整性约束,所以对于直接入住的客户信息记录是无法插入到客户表中。
(2)对“客户”关系增加一个流水号属性作为主码,“客户”关系属于第二范式,存在数据冗余等问题。如表4所示。
从表4所示的例子可以看出,A10001客户有3次预订信息,则其姓名、性别、身份证号、联系方式和类型信息将重复3次。
(3)将增加入住标识属性后的“客户”关系分解为第三范式如下所示:
从表5和表6可以看出,将“客户”关系分解为第三范式后能消除信息冗余及插入删除的不一致性。
表5 客户关系举例
| ||||||||||||||||||||||||||||||||||||||||
表6 客户2关系举例
|