我试图将关系表示法带到SQL但是我得到以下错误(我的sql然后错误)
CREATE TABLE REQUISITION
(REQNO CHAR(6) CONSTRAINT REQNO_PK PRIMARY KEY,
STAFFNO REFERENCES STAFF_CHARGENURSE(STAFFNO),
STAFFNAME REFERENCES SUPPLIES_PHARMACEUTICAL(STAFFNAME),
STAFFNAME REFERENCES SUPPLIES_SURGICAL(STAFFNAME),
STAFFNAME REFERENCES SUPPLIES_NON-SURGICAL(STAFFNAME),
WARDNO CHAR(6),
ITEMNO CHAR(6),
QUANTITY INT,
DATEORDERED DATE,
DATERECIEVED DATE);
STAFFNAME REFERENCES SUPPLIES_SURGICAL(STAFFNAME),
*
ERROR at line 5:
ORA-00957: duplicate column name
如何在SQL中输入多个外键?所有itemNo都指向MANDATORY,OR关系中的超类,这就是为什么他们将itemNo的3个实例作为外键的原因。 Relationary:
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)
答案 0 :(得分:1)
您可以使用明确的CONSTRAINT
语法:
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)
);
答案 1 :(得分:1)
您需要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_C0018431
。像这样的随机名称可以进一步创造额外的工作。
编辑:刚刚注意到您在此示例中使用STAFFNAME
,在这种情况下(假设三个SUPPLIES_表在STAFFNAME
上有主键或唯一键):
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 );
您也可以在表级别或单独的语句中定义它们,但是它们不能继承(第一个)父级的数据类型。
所有itemNo都指向
MANDATORY, OR
关系中的超类,这就是为什么他们将itemNo的3个实例作为外键。
之前我没有听说过“强制性”或“关系”,我认为这不是一个标准的数据建模术语。也许它来自你正在使用的一些工具。
这里没有超类,这些都不是任何实例。您正在定义引用三个单独的数据库表的三个外键约束。外键约束是指定列的所有值必须存在于指定父表中的规则。