Hotel (hotelNo, hotelName, city)
Room (roomNo, hotelNo, type, price)
Booking (hotelNo, guestNo, dateFrom, dateTo,roomNo)
Guest (guestNo,guestName,guestAddress)************************************************************************
where  Hotel contains hotel details and hotelNo is the primary key ;
Room contains room details for each hotel and (roomNo, hotelNo ) forms the primary key ;
Booking contains booking details and (hotelNo,guestNo,dateFrom) forms   
the  primary key
Guest contains guest details and guestNo is the primary key.
************************************************************************我在想,为什么这些表中的一些表,要有这么多主键?
例如,Booking这个表,有必要要那么多主键吗?我认为一个表中有一个主键就可以了。
这里的外键,我认为有这几个,请大家看下,我说的对吗。
外键:
在Room表中,hotelNo是外键。
在Booking表中,guestNo,roomNo是外键我说的对吗?

解决方案 »

  1.   

    1.一个表只能有一个主键;
    2.这个主键可以实施在多个列上。因此一个表的主键可能包含多个列,但不能说有个主键;
    3.是否需要吧主键建在多个列上,根据你的业务需求来决定。BOOKING这个表,主键含3个字段有必要。如果只建主键在hotelNo上,那么一个hotel下有多个guest的要求就没法实现。
    4.外键我猜也该这么建。
      

  2.   

    1.每张表中均定义主键是个良好的习惯,将来省去处理冗于的记录的时间。2.“在Room表中,hotelNo是外键。 
    在Booking表中,guestNo,roomNo是外键”,我想楼主说的是对的。
    因为这些列的取值受限于另一表中的主关键字。