2014-04-09 34 views
0

到目前为止,我有如下表:如何规范下表以3NF

Hotel (ID(pk), NoOfRooms, Phone, Address) 
Room (No(pk), HotelID(pk), Rate, Size, Occupied, Loc) 
Customer (Num(pk), SSN, Name, CreditCard, Address, StartDate, EndDate, AmtOwing, RoomNo(fk)) 
CareTaker (ID(pk), HotelID(fk), Name, Address, Phone, Email, Salary) 
Manager (ID(pk), HotelID(fk), Name, Address, Phone, Email, Salary) 

基于以下假定:

每个经理可以管理一个以上的酒店,但酒店只能有一个经理

每个客户只能停留在一个酒店,并给予一个房间

每个看守工作在只有一个酒店,但酒店可能有许多看护人

客房在特定的酒店是唯一的,但是整个的基于上述假设,我认为应该有表

Hotel (ID(pk), NoOfRooms, Phone, Address) 
Room (No(pk), HotelID(pk), Rate, Size, Occupied, Loc) 
Customer (Num(pk), Name, StartDate, EndDate, RoomNo(fk), SSN(fk)) 
CustomerPaymentInfo (SSN(pk), CreditCard, Address, AmtOwing) 
CareTaker (ID(pk), HotelID(fk)) 
Manager (ID(pk), HotelID(fk)) 
Employee (ID(pk), Name, Address, Phone, Email, Salary) 

让以下更改酒店

几个分支可能不是唯一我知道你的想法,如果你有任何建议。

回答

0

每个经理可以管理一个以上的酒店,但酒店只能有一个经理

=>所以,你需要每家酒店的经理,不是每个经理

  • 酒店(ID一个酒店(PK ),经理ID(FK),NoOfRooms,电话,地址)
  • 经理(ID(PK),删除此:HotelID(FK),姓名,地址,电话,电子邮件,工资)

客房在特定的酒店是唯一的,但是跨越的酒店

几个分支可能不是唯一=>没关系

  • 房(无(PK),HotelID(PK),价格,尺寸,占领,LOC)

每个客户只能停留在一个酒店,并给予一个房间

=>一个房间是由房数加上酒店鉴定:

  • 客户(NUM(PK),SSN,姓名,信用卡式,地址,开始日期,结束日期,AmtOwing,RoomNo(FK),HotelID(FK)

每个看守工作在只一个酒店,但酒店可能有许多看护人

=>没关系

  • 看守(ID(PK),HotelID(FK),姓名,地址,电话,电子邮件,工资)
+0

您是否认为应该有单独的员工表和单独的付款信息,还是那些不需要的? – mako

+0

这取决于。是的,经理和看守都是员工。问题是:是否会有一些过程让你将它们放在一张表中?未来会有更多类型的员工吗?事实上,这很好。但是如果有一天你有十种雇员和本地电话号码将被国际化,你将不得不更新十张表格而不是一张雇员表格。如果决定允许更长的地址,您将不得不更改10个表。但是,也许这些事情永远不会发生。 –

+0

至于单独的付款信息,它大致相同。到目前为止,你只有薪水金额。这通常不值得自己表。但薪水+拨备+货币可能。或者是薪水历史。或者将来有效的提高。这真的取决于。数据模型没有问题,但您可能需要单独的表格用于未来的过程。但是这也让事情变得更加复杂。如何保证每个员工都有薪水记录? –