使用2个表

时间:2017-03-16 01:28:38

标签: sql oracle

我有两张桌子:bedsroom我希望确保在插入时每个房间最多可以有5张床(即公司总共拥有50张床,可以换掉从一个房间到另一个房间的各种组合,但每个房间最多只能有5个)。

床位中的主键是room_idbed_idroom_id是外键的复合键),但我不确定如何将其作为约束实现对于桌子?

下面的表格

CREATE TABLE "ROOM"
   ("ROOM_NO" NUMBER(*,0), 
    "ROOM_NAME" VARCHAR2(45 CHAR) NOT NULL ENABLE, 
     CONSTRAINT "ROOM_NO_PK" PRIMARY KEY ("ROOM_NO")



CREATE TABLE "BED" 
   ("ROOM_NO" NUMBER(*,0), 
    "BED_NO" NUMBER(*,0), 
     CONSTRAINT "BED_PK" PRIMARY KEY ("ROOM_NO", "BED_NO")

我是sql的新手并没有涵盖触发器和序列,请您用简单的术语解释如何执行此操作?

1 个答案:

答案 0 :(得分:0)

好的,根据你的评论,我会稍微修改一下这个方法

我们走了:

    CREATE TABLE "BED" 
   (
    "BED_NO" NUMBER(*,0), 
    "ROOM_NO" NUMBER(*,0), 
    "BED_ROOM_SN" NUMBER(*,0),   

     CONSTRAINT "BED_PK" PRIMARY KEY ("BED_NO"),
     CONSTRAINT rm_fk FOREIGN KEY ("ROOM_NO") REFERENCES "ROOM",
     CONSTRAINT chk_beds CHECK ("BED_ROOM_SN" IN (1,2,3,4,5)),
     CONSTRAINT constraint_name UNIQUE ("ROOM_NO", "BED_ROOM_SN")
    )

我会解释:

BED表包含:

  • BED_NO(床位序号,也是此表中的一个键......在你的 案例 - 数字1..50
  • ROOM_NO - 房间号(外键,引用ROOM表)

  • BED_ROOM_SN - 房间内床的SN,只能从15

  • 此外,一个房间只能有一张第一张床,一张第二张床等 - 因此uniqueRoom_no,BED_ROOM_SN

关于规范化,这里我们有one-to-many个关系(一个room有很多beds,但是一个bed只有一个room),所以& #39;为什么room的密钥作为foreign keybed表。