外键或主键ORA-02270,我无法插入表格

时间:2017-10-13 01:32:59

标签: sql oracle

我有以下代码,它表示错误ORA-02270

    CREATE TABLE SEDE(
    SEDE VARCHAR2(50) NOT NULL,
    CAMPUS VARCHAR2(50),

    CONSTRAINT PK_SEDE PRIMARY KEY(SEDE)
);

---------------------------------------------
CREATE TABLE DEPARTAMENTO(
        NOMBRE VARCHAR2(50) NOT NULL,
        SEDE VARCHAR2(50) NOT NULL,
        TELEFONO VARCHAR2(10),
        DIRECTOR INT,

        CONSTRAINT PK_DEPARTAMENTO PRIMARY KEY(NOMBRE,SEDE)
);

---------------------------------------------
***HERE IS THE PROBLEM****

CREATE TABLE UBICACION(
    NOMBRE_SEDE VARCHAR2(50) NOT NULL,
    NOMBRE_DEPTO VARCHAR2(50) NOT NULL,

    CONSTRAINT PK_UBICACION PRIMARY KEY(NOMBRE_SEDE,NOMBRE_DEPTO),
    CONSTRAINT FK_UBICACION FOREIGN KEY(NOMBRE_SEDE) REFERENCES SEDE(SEDE) ON DELETE CASCADE,
    CONSTRAINT FK_UBICACION2 FOREIGN KEY(NOMBRE_DEPTO) REFERENCES DEPARTAMENTO(NOMBRE) ON DELETE CASCADE

);

编辑:更多代码来回答问题。

CREATE TABLE GRUPO(
    NOMBRE VARCHAR2(50) NOT NULL,
    AREA_CONOCIMIENTO VARCHAR2(50),
    NOMBRE_DEPTO VARCHAR2(50),
    LIDER INT,

    CONSTRAINT PK_GRUPO PRIMARY KEY(NOMBRE,NOMBRE_DEPTO)

);


---------------------------------------------

CREATE TABLE PROFESOR(
    DNI INT NOT NULL,
    NOMBRE VARCHAR2(50),
    TITULACION VARCHAR2(50),
    ANIOS_EXP INT,
    GRUPO_PARTICIPA VARCHAR2(50),
    CONSTRAINT PK_PROFESOR PRIMARY KEY(DNI)

);



ALTER TABLE DEPARTAMENTO ADD CONSTRAINT FK_DEPARTAMENTO FOREIGN KEY(DIRECTOR) REFERENCES PROFESOR(DNI) ON DELETE CASCADE;

   ** HERE IS PROBLEM TOO***  
    ALTER TABLE GRUPO ADD CONSTRAINT FK_GRUPO FOREIGN KEY(NOMBRE_DEPTO) REFERENCES DEPARTAMENTO(NOMBRE) ON DELETE CASCADE;
ALTER TABLE GRUPO ADD CONSTRAINT FK_GRUPO2 FOREIGN KEY(LIDER) REFERENCES PROFESOR(DNI) ON DELETE CASCADE;
  

Informe de error -   ORA-02270:此列列表没有匹配的唯一键或主键   02270. 00000 - “此列列表没有匹配的唯一或主键”   *原因:CREATE / ALTER TABLE语句中的REFERENCES子句              给出一个没有匹配的唯一或主要列的列表              引用表中的键约束。   *操作:使用ALL_CONS_COLUMNS查找正确的列名称              目录视图

我该怎么办? 提前谢谢

2 个答案:

答案 0 :(得分:1)

这个问题解决了原始问题。

departmento上的主键有两个部分。如果需要外键关系,则需要同时引用它们:

CREATE TABLE UBICACION(
    NOMBRE_SEDE VARCHAR2(50) NOT NULL,
    NOMBRE_DEPTO VARCHAR2(50) NOT NULL,

    CONSTRAINT PK_UBICACION PRIMARY KEY(NOMBRE_SEDE,NOMBRE_DEPTO),
    CONSTRAINT FK_UBICACION FOREIGN KEY(NOMBRE_SEDE) REFERENCES SEDE(SEDE) ON DELETE CASCADE,
    CONSTRAINT FK_UBICACION2 FOREIGN KEY(NOMBRE_DEPTO, NOMBRE_SEDE) REFERENCES DEPARTAMENTO(NOMBRE, SEDE) ON DELETE CASCADE

);

Here是一个SQL小提琴。

答案 1 :(得分:0)

你必须再看看你的设计。如果DEPARTMENTO具有复合主键(2列),则对它的外键引用不能单独用于单个列 - 因为仅单个列不能保证唯一性。