我有两张桌子:beds
和room
我希望确保在插入时每个房间最多可以有5张床(即公司总共拥有50张床,可以换掉从一个房间到另一个房间的各种组合,但每个房间最多只能有5个)。
床位中的主键是room_id
和bed_id
(room_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的新手并没有涵盖触发器和序列,请您用简单的术语解释如何执行此操作?
答案 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,只能从1
到5
unique
(Room_no,BED_ROOM_SN
)关于规范化,这里我们有one-to-many
个关系(一个room
有很多beds
,但是一个bed
只有一个room
),所以& #39;为什么room
的密钥作为foreign key
到bed
表。