2017-12-09 46 views
0

テーブルを作成するときにERROR1215が引き続き発生します。私は問題を2つの属性 "score"と "criteriaNum"に絞り込んだ。私はそれがなぜ問題を引き起こしているのか理解できません。外部キーの制約エラー

CREATE TABLE IF NOT EXISTS `sys`.`rubric` (
    `programName` VARCHAR(100) NOT NULL, 
    `criteriaNum` INT UNSIGNED NOT NULL, 
    `score` INT UNSIGNED NOT NULL, 
    `criteria` TINYTEXT NOT NULL, 
    `description` TINYTEXT NOT NULL, 
    PRIMARY KEY (`programName`, `criteriaNum`,`score`), 
    CONSTRAINT `rubric_programName` 
    FOREIGN KEY (`programName`) 
    REFERENCES `sys`.`degree_program` (`programName`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE) 
    COMMENT 'Each entry in the rubric table corresponds to a criteria,score pair.'; 

CREATE TABLE IF NOT EXISTS`sys`.`evaluator_scores` (
    `evaluatorName` VARCHAR(100) NOT NULL, 
    `aid` INT NOT NULL, 
    `programName` VARCHAR(100) NOT NULL, 
    `criteriaNum` INT UNSIGNED NOT NULL, 
    `score` INT UNSIGNED NOT NULL, 
    PRIMARY KEY (`aid`, `evaluatorName`, `programName`, `criteriaNum`, `score`), 
    CONSTRAINT `score_aid` 
    FOREIGN KEY (`aid`) 
    REFERENCES `sys`.`application` (`aid`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE, 
    CONSTRAINT `score_evalName` 
    FOREIGN KEY (`evaluatorName`) 
    REFERENCES `sys`.`evaluations` (`evaluatorName`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE, 
    CONSTRAINT `score_programName` 
    FOREIGN KEY (`programName`) 
    REFERENCES `sys`.`rubric` (`programName`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE, 
    CONSTRAINT `score_criteriaNum` 
    FOREIGN KEY (`criteriaNum`) 
    REFERENCES `sys`.`rubric` (`criteriaNum`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE, 
    CONSTRAINT `score_score` 
    FOREIGN KEY (`score`) 
    REFERENCES `sys`.`rubric` (`score`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE); 

scoreとcriteriaNum制約を削除すると、evaluator_scoresが作成されます。それ以外の場合はエラーが発生します。誰でも問題を見つけることができますか?

答えて

0

外部キーの概念は、そのキーを子に含めるために親テーブルに対応するレコードが必要であるということです。親テーブルでは、主キーは(programName、criteriaNum、score)です。しかし、あなたの子テーブルでは、Rubricテーブルに対して3つの外部キー制約を作成しようとしています。

これらの3つの制約を1つに結合し、主キー列に一致させると、機能するはずです。