同一外键在SQL中如何具有多个引用?
我试图将关系表示形式转换为SQL,但出现以下错误(我的SQL-then错误)同一外键在SQL中如何具有多个引用?,sql,oracle,Sql,Oracle,我试图将关系表示形式转换为SQL,但出现以下错误(我的SQL-then错误) 如何在SQL中输入多个外键?所有itemNo都指向强制关系或关系中的超类,这就是为什么它们是作为外键的itemNo的3个实例。关系的: Requisition(reqNo, staffNo, staffName, wardNo, itemNo, quantity, dateOrdered, dateRecieved) Primary Key reqNo Foreign Key staffNo refe
如何在SQL中输入多个外键?所有itemNo都指向强制关系或关系中的超类,这就是为什么它们是作为外键的itemNo的3个实例。关系的:
Requisition(reqNo, staffNo, staffName, wardNo, itemNo, quantity, dateOrdered, dateRecieved)
Primary Key reqNo
Foreign Key staffNo references Staff_ChargeNurse(staffNo)
Foreign Key itemNo references Supplies_Pharmaceutical(itemNo)
Foreign Key itemNo references Supplies_Surgical(itemNo)
Foreign Key itemNo references Supplies_Non-Surgical(itemNo)
您可以使用显式
约束
语法:
CREATE TABLE REQUISITION(
REQNO CHAR(6) CONSTRAINT REQNO_PK PRIMARY KEY,
STAFFNO REFERENCES STAFF_CHARGENURSE(STAFFNO),
STAFFNAME data_type,
WARDNO CHAR(6),
ITEMNO CHAR(6),
QUANTITY INT,
DATEORDERED DATE,
DATERECIEVED DATE,
CONSTRAINT FK_1 FOREIGN KEY (ItemNo)
REFERENCES SUPPLIES_PHARMACEUTICAL(ItemNo),
CONSTRAINT FK_2 FOREIGN KEY (ItemNo)
REFERENCES SUPPLIES_SURGICAL(ItemNo),
CONSTRAINT FK_3 FOREIGN KEY (ItemNo)
REFERENCES SUPPLIES_NON_SURGICAL(ItemNo)
);
您希望对
itemno
列设置三个约束,而不是三个itemno
列:
create table requisition
( reqno varchar2(6) constraint reqno_pk primary key
, staffno references staff_chargenurse(staffno)
, staffname varchar2(20)
, wardno varchar2(6)
, itemno constraint fk_1 references supplies_pharmaceutical(itemno)
constraint fk_2 references supplies_surgical(itemno)
constraint fk_3 references supplies_nonsurgical(itemno)
, quantity int
, dateordered date
, daterecieved date );
您可以命名约束,也可以让系统进行命名。在上面的示例中,staffno
上的FK在我的数据库中被命名为SYS\u C0018431
。像这样的随机名称可以进一步创建额外的工作
编辑:刚刚注意到您在本例中使用的是STAFFNAME
,在这种情况下(假设三个供应表在STAFFNAME
上有一个主键或唯一键):
您也可以在表级别或作为单独的语句定义它们,但是它们不能继承(第一个)父级的数据类型
所有itemNo都指向强制关系或关系中的超类,这就是为什么它们是作为外键的itemNo的3个实例
我以前没有听说过“强制或”关系,我认为这不是一个标准的数据建模术语。也许是你正在使用的某种工具
这里没有超类,这些都不是任何东西的实例。您正在定义三个外键约束,它们引用三个单独的数据库表。外键约束是指定列的所有值必须存在于指定父表中的规则。1。不应使用的非手术用品-作为表名的一部分。2.为什么在需求中使用STAFFNAME,而它是itemNo列?“relationary”对我来说是另一个新术语。它们来自哪里?在外键
子句中指定的列名需要用括号括起来,例如约束FK_1外键(ItemNo)
。最后一个约束后面还有一个逗号。@WilliamRobertson当然可以。谢谢你的评论。至于尾随逗号,有些方言允许。在这里,它将导致语法错误。
CREATE TABLE REQUISITION(
REQNO CHAR(6) CONSTRAINT REQNO_PK PRIMARY KEY,
STAFFNO REFERENCES STAFF_CHARGENURSE(STAFFNO),
STAFFNAME data_type,
WARDNO CHAR(6),
ITEMNO CHAR(6),
QUANTITY INT,
DATEORDERED DATE,
DATERECIEVED DATE,
CONSTRAINT FK_1 FOREIGN KEY (ItemNo)
REFERENCES SUPPLIES_PHARMACEUTICAL(ItemNo),
CONSTRAINT FK_2 FOREIGN KEY (ItemNo)
REFERENCES SUPPLIES_SURGICAL(ItemNo),
CONSTRAINT FK_3 FOREIGN KEY (ItemNo)
REFERENCES SUPPLIES_NON_SURGICAL(ItemNo)
);
create table requisition
( reqno varchar2(6) constraint reqno_pk primary key
, staffno references staff_chargenurse(staffno)
, staffname varchar2(20)
, wardno varchar2(6)
, itemno constraint fk_1 references supplies_pharmaceutical(itemno)
constraint fk_2 references supplies_surgical(itemno)
constraint fk_3 references supplies_nonsurgical(itemno)
, quantity int
, dateordered date
, daterecieved date );
create table requisition
( reqno varchar2(6) constraint reqno_pk primary key
, staffno references staff_chargenurse(staffno)
, staffname constraint rs1 references supplies_pharmaceutical(staffname)
constraint rs2 references supplies_surgical(staffname)
constraint rs3 references supplies_nonsurgical(staffname)
, wardno varchar2(6)
, itemno varchar2(6)
, quantity int
, dateordered date
, daterecieved date );