表“ tableName”包含约束定义,该约束定义的列“ columnName”不在表Java Derby中

时间:2019-12-12 21:37:10

标签: sql derby

我正在尝试对在Java Derby上创建的数据库运行SQL脚本:

    CREATE TABLE USUARIO (
    ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY,
    EMAIL VARCHAR(40) NOT NULL UNIQUE,
    NOMBRES VARCHAR(20) NOT NULL,
    APELLIDOS VARCHAR(20) NOT NULL,
    CONTRASEÑA VARCHAR(20) NOT NULL,
    CEDULA INTEGER,
    TELEFONO INTEGER,

    CONSTRAINT ID_USUARIO_PK PRIMARY KEY (ID) -- Primary Key
);

CREATE TABLE ORGANIZACION (
    ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY, -- Id autonumérico
    NOMBRE VARCHAR(20) NOT NULL,

    CONSTRAINT ID_ORGANIZACION_PK PRIMARY KEY (ID),
    CONSTRAINT ID_DIRECCION_ORG_FK FOREIGN KEY (DIRECCION_ORG) REFERENCES DIRECCION_ORG (ID),
    CONSTRAINT ID_TELEFONO_ORG_FK FOREIGN KEY (TELEFONO_ORG) REFERENCES TELEFONO_ORG (ID)
);

CREATE TABLE TELEFONO_ORG (
    ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY, -- Id autonumérico
    TELEFONO INTEGER NOT NULL,

    CONSTRAINT ID_TELEFONO_ORG_PK PRIMARY KEY (ID)
);

CREATE TABLE DIRECCION_ORG (
    ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY, -- Id autonumérico
    DIRECCION VARCHAR(300) NOT NULL,

    CONSTRAINT ID_DIRECCION_ORG_PK PRIMARY KEY (ID)
);

CREATE TABLE PRODUCTO (
    ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY,
    RUTA_IMAGEN VARCHAR(400) NOT NULL,
    NOMBRE VARCHAR(20) NOT NULL,
    CANTIDAD INTEGER,
    PRECIO INTEGER,
    COSTO INTEGER,

    CONSTRAINT ID_PRODUCTO_PK PRIMARY KEY (ID), -- Primary Key
    CONSTRAINT ID_ORGANIZACION_FK FOREIGN KEY (ORGANIZACION) REFERENCES ORGANIZACION (ID)
);

但是我收到此错误:

  

表ORGANIZACION包含带有列的约束定义   不在表中的DIRECCION_ORG。

这有什么问题吗?

3 个答案:

答案 0 :(得分:1)

DIRECCION_ORG中没有定义列TELEFONO_ORGORGANIZACION

在表PRODUCTO中,未定义列ORGANIZACION的表中发生了相同的问题

答案 1 :(得分:1)

CONSTRAINT子句中有错误。

FOREIGN KEY约束的格式为:

  
    

CONSTRAINT {约束名称} FOREIGN KEY([This_table_column],...)参考[Other_table]([Other_table_column],...)。

  

阅读:https://db.apache.org/derby/docs/10.1/ref/rrefsqlj13590.html#rrefsqlj13590

答案 2 :(得分:1)

您正在对外键进行约束,但实际上尚未创建包含这些键的列。使这些列并使约束指向它们(而不仅仅是再次使用表的名称)。以下显示的--注释指示添加位置。

CREATE TABLE USUARIO (
    ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY,
    EMAIL VARCHAR(40) NOT NULL UNIQUE,
    NOMBRES VARCHAR(20) NOT NULL,
    APELLIDOS VARCHAR(20) NOT NULL,
    CONTRASEÑA VARCHAR(20) NOT NULL,
    CEDULA INTEGER,
    TELEFONO INTEGER,

    CONSTRAINT ID_USUARIO_PK PRIMARY KEY (ID) -- Primary Key
);

CREATE TABLE ORGANIZACION (
    ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY, -- Id autonumérico
    NOMBRE VARCHAR(20) NOT NULL,
    DIRECCION_ORG_ID INTEGER NOT NULL,   -- ADD THIS and change constraint FK name
    TELEFONO_ORG_ID INTEGER NOT NULL,   -- ADD THIS and change constraint FK name

    CONSTRAINT ID_ORGANIZACION_PK PRIMARY KEY (ID),
    CONSTRAINT ID_DIRECCION_ORG_FK FOREIGN KEY (DIRECCION_ORG_ID) REFERENCES DIRECCION_ORG (ID),
    CONSTRAINT ID_TELEFONO_ORG_FK FOREIGN KEY (TELEFONO_ORG_ID) REFERENCES TELEFONO_ORG (ID)
);

CREATE TABLE TELEFONO_ORG (
    ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY, -- Id autonumérico
    TELEFONO INTEGER NOT NULL,

    CONSTRAINT ID_TELEFONO_ORG_PK PRIMARY KEY (ID)
);

CREATE TABLE DIRECCION_ORG (
    ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY, -- Id autonumérico
    DIRECCION VARCHAR(300) NOT NULL,

    CONSTRAINT ID_DIRECCION_ORG_PK PRIMARY KEY (ID)
);

CREATE TABLE PRODUCTO (
    ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY,
    RUTA_IMAGEN VARCHAR(400) NOT NULL,
    NOMBRE VARCHAR(20) NOT NULL,
    CANTIDAD INTEGER,
    PRECIO INTEGER,
    COSTO INTEGER,
    ORGANIZACION_ID INTEGER NOT NULL, --ADD THIS and change constraint FK name

    CONSTRAINT ID_PRODUCTO_PK PRIMARY KEY (ID), -- Primary Key
    CONSTRAINT ID_ORGANIZACION_FK FOREIGN KEY (ORGANIZACION_ID) REFERENCES ORGANIZACION (ID)
);