原帖在这里
http://topic.csdn.net/u/20080923/15/69b9d670-a167-4426-9d60-f50ba8b4aa1d.html注意Room这个表中。我在上个帖子中认为,Room表中的hotelNo是一个外键。但是在上一个表中的描述中,说道:Room contains room details for each hotel and (roomNo, hotelNo ) forms the primary key ; 那我应该怎样做呢?

解决方案 »

  1.   

    是这样的,上个已结贴的问题,是我做的一个习题。习题里边有很多问题,其中一个问题是,找出这个schema中的外键
    但是习题的描述里边称,Room表中的hotelNo这列属于主键中的一列。那么外键中还能包含这个hotelNo这列吗?在那个已结贴的帖子中,我说 在Room表中,hotelNo是外键。
    但是,那个结贴的帖子中已经说到:Room contains room details for each hotel and (roomNo, hotelNo ) forms the primary key ; 所以,我不知道这个题中的外键,到底应该有哪几个?
    请大家帮忙。
      

  2.   

    说错了 HOTEL表的主键hotelNo 作为Room表的外建存在
      

  3.   

    Room (roomNo, hotelNo, type, price)表: 
    主键:roomNo, hotelNo 
    外键:hotelNo(引用Hotel.hotelNo)
    就这样啊。hotelNo是外键,同时是ROOM表主键中的一列。
      

  4.   

    哦,谢谢各位啊。
    我后来又看了一下英文的描述,它说room里边的roomNo,hotelNo是主键,并且room里边的hotelNo还是外键?
    主外键是一个?这样情况可以吗?我怕我做错了。
    那要是我这样创建room表,对不对?
    Room (roomNo, hotelNo, type, price)
    CREATE TABLE Room(
        roomNo datatype(),
        hotelNo ...
       ...
       CONTRAINT rm_rn_pk PRIMARY KEY (roomNo,hotelNo)
    );那如果在booking这个表中,我写外键约束
    【booking (hotelNo, guestNo, dateFrom, dateTo,roomNo)】
    这样写对吗?
    CONTRAINT bk_h_fk FOREIGN KEY (hotelNo) REFERENCES hotel (hotel.hotelNo),
    CONTRAINT bk_g_fk FOREIGN KEY (guestNo) REFERENCES guest (guest.guestNo),
    CONTRAINT bk_r_fk FOREIGN KEY (roomNo) REFERENCES room (hotel.roomNo)这样做对吗?我就是不太明白一个表中的一列是否可以设置成主键又同时设为成外键。谢谢大家解答,我是以前没研究过。