同一外键在SQL中如何具有多个引用?

同一外键在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,但出现以下错误(我的SQL-then错误)


如何在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 );