我的第一个编程程序是Oracle数据库研究生证书程序,并且教科书在某些地方不是Oracle友好的(它是一个通用的数据库教科书)。我不得不重写CREATE表命令,我想出的是下面的内容。
表是在我的数据库中创建的,我可以将值插入到供应商表中;但是,每次我在产品表中插入值时,都会收到ORA-02291 integrity error
。
我意识到在供应商表中找不到父密钥,但我不知道为什么。我在两个表上尝试了列和表约束的组合,但没有任何作用。如果有人可以帮助我建立这种关系,那么我可以练习那将是伟大的!
CREATE TABLE VENDOR(
V_CODE INTEGER NOT NULL CONSTRAINT VENDOR_P_K PRIMARY KEY,
V_NAME VARCHAR(35) NOT NULL,
V_CONTACT VARCHAR(25) NOT NULL,
V_AREACODE CHAR(3) NOT NULL,
V_PHONE CHAR(8) NOT NULL,
V_STATE CHAR(2) NOT NULL,
V_ORDER CHAR(1) NOT NULL
);
----------------------------------------------------------------------------
CREATE TABLE PRODUCT(
P_CODE VARCHAR2(10) CONSTRAINT PRODUCT_P_CODE_PK PRIMARY KEY,
P_DESCRIPT VARCHAR2(35) NOT NULL,
P_INDATE DATE NOT NULL,
P_QOH NUMBER NOT NULL,
P_MIN NUMBER NOT NULL,
P_PRICE NUMBER(8,2) NOT NULL,
P_DISCOUNT NUMBER(5,2) NOT NULL,
V_CODE INTEGER NOT NULL,
CONSTRAINT V_CODE_FK FOREIGN KEY (V_CODE) REFERENCES VENDOR (V_CODE)
);
INSERT INTO VENDOR 2
VALUES (21225, 'Bryson, Inc.', 'Smithson', '615','223-3234','TN','Y');
INSERT INTO VENDOR 2
VALUES (21226,'Superloo, Inc.','Flushing','904','215-8995','FL','N');
INSERT INTO PRODUCT 2
VALUES ('11QER/31','Power painter, 15 psi., 3-nozzle','03-Nov-13',8,5,109.99,0.00,25595);
答案 0 :(得分:3)
关系设置正确。
您只能在主表中插入与主键值匹配的外键值。在您的示例中,您插入的产品包含V_CODE = 25595
,但您永远不会使用此V_CODE
插入供应商。
也许您打算稍后插入供应商。这不起作用,因为数据库正在为每个命令强制执行约束。因此,请先插入供应商,然后再附加其产品。
如果要删除供应商,请先删除其产品,然后删除供应商,除非您使用的是Foreign Keys with Cascade Delete。