0

私のデータベースは、apache cayenne を使用して構成された次の SQL を使用しています。

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);

ただし、要素テーブルに要素が存在し、プロジェクトを削除しようとすると、次のメッセージが表示されます。

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`)) 

外部キーの何が問題になっていますか?

「プロジェクト」の列を表示します。

プロジェクト http://nottsbsa.org/Images/SO5.png

「要素」の列を表示します。

プロジェクト http://nottsbsa.org/Images/SO4.png

現在私のテーブルにあるデータは次のとおりです。

プロジェクト http://nottsbsa.org/Images/SO1.png

要素 http://nottsbsa.org/Images/SO2.png

データベースの目的は、それ自体を参照する要素テーブルを持つことです。そのため、プロジェクトには多くの要素を含めることができ、要素には親要素または多くの子要素を含めることができます。これは Apache Cayenne を使用して構築されていることに注意してください。

どうもありがとう

4

0 に答える 0