0

My database uses the following SQL, which has been comprised using apache cayenne.

SET FOREIGN_KEY_CHECKS=0;

DROP TABLE IF EXISTS Element CASCADE;

SET FOREIGN_KEY_CHECKS=1;

SET FOREIGN_KEY_CHECKS=0;

DROP TABLE IF EXISTS Project CASCADE;

SET FOREIGN_KEY_CHECKS=1;

CREATE TABLE Project (
    ID BIGINT NOT NULL,
    Name VARCHAR(100) NOT NULL,
    PRIMARY KEY (ID)
) ENGINE=InnoDB;

CREATE TABLE Element (
    Alt VARCHAR(500) NULL,
    BackgroundColour VARCHAR(6) NULL,
    Colour VARCHAR(6) NULL,
    DisplayOrder INT NULL,
    FontFamily VARCHAR(30) NULL,
    FontSize INT NULL,
    Height INT NULL,
    ID VARCHAR(30) NOT NULL,
    Name VARCHAR(30) NULL,
    PKID BIGINT NOT NULL,
    ParentPKID BIGINT NULL,
    ProjectID BIGINT NOT NULL,
    RelativeX INT NULL,
    RelativeY INT NULL,
    Src VARCHAR(500) NULL,
    Type VARCHAR(10) NOT NULL,
    Value VARCHAR(10000) NULL,
    Width INT NULL,
    PRIMARY KEY (PKID)
) ENGINE=InnoDB;

ALTER TABLE Element ADD FOREIGN KEY (ParentPKID) REFERENCES Element (PKID);

ALTER TABLE Element ADD FOREIGN KEY (ProjectID) REFERENCES Project (ID);

DROP TABLE IF EXISTS AUTO_PK_SUPPORT;

CREATE TABLE AUTO_PK_SUPPORT (
    TABLE_NAME CHAR(100) NOT NULL,
    NEXT_ID BIGINT NOT NULL,
    UNIQUE (TABLE_NAME)
);

DELETE FROM AUTO_PK_SUPPORT WHERE TABLE_NAME IN ('Element', 'Project');

INSERT INTO AUTO_PK_SUPPORT (TABLE_NAME, NEXT_ID) VALUES ('Element', 200);

INSERT INTO AUTO_PK_SUPPORT (TABLE_NAME, NEXT_ID) VALUES ('Project', 200);

However, when elements exist in my element table and I try to delete the project, I receive:

SQL query:

DELETE FROM  `bluetwine`.`project` WHERE  `project`.`ID` =240

MySQL said: Documentation

#1451 - Cannot delete or update a parent row: a foreign key constraint fails (`bluetwine`.`element`, CONSTRAINT `element_ibfk_2` FOREIGN KEY (`ProjectID`) REFERENCES `project` (`ID`)) 

What is wrong with my foreign key?

SHOW COLUMNS FROM 'Project';

project http://nottsbsa.org/Images/SO5.png

SHOW COLUMNS FROM 'Element';

project http://nottsbsa.org/Images/SO4.png

The data currently in my tables is:

project http://nottsbsa.org/Images/SO1.png

element http://nottsbsa.org/Images/SO2.png

The purpose of the database is to have an element table referencing itself, so a project can have many elements, and an element can have a parent element or many child elements. Note that this has been built using Apache Cayenne, so any cayenne answers are welcome!

Many thanks

Tom Hadkiss
  • 267
  • 1
  • 7
  • 16

0 Answers0