2012-04-21 2 views
3

これは、第3正規形でデータベースを作成する際の私の最初の本当の亀裂です。私はDDLスクリプトを作成することができました。(私が先に進んでスクリプトを作成する前に論理モデルを3NFに検証しましたが)私は修正が不確かです。私はこの特定のケースで噛むことができる以上に噛んでいるかもしれませんが、私はあきらめたくありません - それは私にとって大きな学習曲線です。MySQLでERROR 1701、ERROR 1452、ERROR 1305エラーが発生する - 専門知識が必要

まず第一に、ここに私のDDLスクリプトです:

-- This sql script creates the structure. 
-- of the rugby club database. 

DROP DATABASE IF EXISTS database_rugby; 

CREATE DATABASE database_rugby; 

USE database_rugby; 

-- Create the "coach" table. 
DROP TABLE IF EXISTS `database_rugby`.`coach` ; 
CREATE TABLE IF NOT EXISTS `database_rugby`.`coach` (
    `coachID` INT(5) NOT NULL , 
    `dateBeganCoaching` DATE NOT NULL , 
    `personID` INT(5) NOT NULL , 
    PRIMARY KEY (`coachID`)) 
ENGINE = InnoDB; 


-- Create the "grade" table. 
DROP TABLE IF EXISTS `database_rugby`.`grade` ; 
CREATE TABLE IF NOT EXISTS `database_rugby`.`grade` (
    `gradeID` INT(5) NOT NULL AUTO_INCREMENT , 
    `gradeName` VARCHAR(50) NOT NULL , 
    `minWeight` INT(3) NOT NULL , 
    `maxWeight` INT(3) NOT NULL , 
    `minAge` INT(3) NOT NULL , 
    `maxAge` INT(3) NOT NULL , 
    `ballSize` INT(1) NOT NULL , 
    PRIMARY KEY (`gradeID`)) 
ENGINE = InnoDB; 


-- Create the "coachQualification" table. 
DROP TABLE IF EXISTS `database_rugby`.`coachQualification` ; 

CREATE TABLE IF NOT EXISTS `database_rugby`.`coachQualification` (
    `qualID` INT(5) NOT NULL AUTO_INCREMENT , 
    `qualName` CHAR(5) NOT NULL , 
    `gradeID` INT(5) NOT NULL , 
    PRIMARY KEY (`qualID`) , 
    INDEX `gradeID` (`gradeID` ASC) , 
    CONSTRAINT `coachQualification_ibfk_1` 
    FOREIGN KEY (`gradeID`) 
    REFERENCES `database_rugby`.`grade` (`gradeID`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE) 
ENGINE = InnoDB; 


-- Create the "parent" table. 
DROP TABLE IF EXISTS `database_rugby`.`parent` ; 
CREATE TABLE IF NOT EXISTS `database_rugby`.`parent` (
    `parentID` INT(5) NOT NULL , 
    `personID` INT(5) NOT NULL , 
    PRIMARY KEY (`parentID`)) 
ENGINE = InnoDB; 


-- Create the "school" table. 
DROP TABLE IF EXISTS `database_rugby`.`school` ; 
CREATE TABLE IF NOT EXISTS `database_rugby`.`school` (
    `schoolID` INT(5) NOT NULL AUTO_INCREMENT , 
    `schoolName` VARCHAR(100) NOT NULL , 
    PRIMARY KEY (`schoolID`)) 
ENGINE = InnoDB; 


-- Create the "player" table. 
-- 
-- Inherits fields from the "person" 
-- and "school" tables. 
DROP TABLE IF EXISTS `database_rugby`.`player` ; 

CREATE TABLE IF NOT EXISTS `database_rugby`.`player` (
    `playerID` INT(5) NOT NULL , 
    `personID` INT(5) NOT NULL , 
    `schoolID` INT(5) NOT NULL , 
    PRIMARY KEY (`playerID`) , 
    INDEX `schoolID` (`schoolID` ASC) , 
    CONSTRAINT `player_ibfk_1` 
    FOREIGN KEY (`schoolID`) 
    REFERENCES `database_rugby`.`school` (`schoolID`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE) 
ENGINE = InnoDB; 


-- Create the "person" table. 
-- 
-- This table has one:one relationships 
-- with the parent, coach and player 
-- tables. 
DROP TABLE IF EXISTS `database_rugby`.`person` ; 
CREATE TABLE IF NOT EXISTS `database_rugby`.`person` (
    `personID` INT(5) NOT NULL AUTO_INCREMENT , 
    `firstName` VARCHAR(50) NOT NULL , 
    `lastName` VARCHAR(50) NOT NULL , 
    `dateOfBirth` DATE NOT NULL , 
    `streetAddress` VARCHAR(150) NOT NULL , 
    `suburbAddress` VARCHAR(150) NULL DEFAULT NULL , 
    `cityAddress` VARCHAR(150) NOT NULL , 
    `photo` BLOB NULL DEFAULT NULL , 
    `parent_parentID` INT(5) NOT NULL DEFAULT '0' , 
    `coach_coachID` INT(5) NOT NULL DEFAULT '0' , 
    `player_playerID` INT(5) NOT NULL DEFAULT '0' , 
    `parent_parentID1` INT(5) NOT NULL DEFAULT '0' , 
    `player_playerID1` INT(5) NOT NULL DEFAULT '0' , 
    `coach_coachID1` INT(5) NOT NULL DEFAULT '0' , 
    `coach_coachID2` INT(5) NOT NULL DEFAULT '0' , 
    `parent_parentID2` INT(5) NOT NULL DEFAULT '0' , 
    `player_playerID2` INT(5) NOT NULL DEFAULT '0' , 
    PRIMARY KEY (`personID`) , 
    INDEX `fk_person_coach1` (`coach_coachID2` ASC) , 
    INDEX `fk_person_parent1` (`parent_parentID2` ASC) , 
    INDEX `fk_person_player1` (`player_playerID2` ASC) , 
    CONSTRAINT `fk_person_coach1` 
    FOREIGN KEY (`coach_coachID2`) 
    REFERENCES `database_rugby`.`coach` (`coachID`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `fk_person_parent1` 
    FOREIGN KEY (`parent_parentID2`) 
    REFERENCES `database_rugby`.`parent` (`parentID`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `fk_person_player1` 
    FOREIGN KEY (`player_playerID2`) 
    REFERENCES `database_rugby`.`player` (`playerID`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 


-- Create the "homePhone" table. 
DROP TABLE IF EXISTS `database_rugby`.`homePhone` ; 
CREATE TABLE IF NOT EXISTS `database_rugby`.`homePhone` (
    `homePhoneID` INT(5) NOT NULL AUTO_INCREMENT , 
    `homeNumber` CHAR(9) NOT NULL , 
    PRIMARY KEY (`homePhoneID`)) 
ENGINE = InnoDB; 


-- Create the "mobilePhone" table. 
DROP TABLE IF EXISTS `database_rugby`.`mobilePhone` ; 

CREATE TABLE IF NOT EXISTS `database_rugby`.`mobilePhone` (
    `mobilePhoneID` INT(5) NOT NULL AUTO_INCREMENT , 
    `mobileNumber` CHAR(10) NULL DEFAULT NULL , 
    PRIMARY KEY (`mobilePhoneID`)) 
ENGINE = InnoDB; 


-- Create the "emailAddress" table. 
DROP TABLE IF EXISTS `database_rugby`.`emailAddress` ; 

CREATE TABLE IF NOT EXISTS `database_rugby`.`emailAddress` (
    `emailAddressID` INT(5) NOT NULL AUTO_INCREMENT , 
    `emailAddress` CHAR(10) NULL DEFAULT NULL , 
    PRIMARY KEY (`emailAddressID`)) 
ENGINE = InnoDB; 


-- Create the "Contact" table 
-- 
-- This is a linking table 
-- that describes the many:many 
-- relationships between "person" 
-- and the "homePhone", "mobilePhone", 
-- and "emailAddress" tables. 
DROP TABLE IF EXISTS `database_rugby`.`contact` ; 
CREATE TABLE IF NOT EXISTS `database_rugby`.`contact` (
    `personID` INT(5) NOT NULL , 
    `homePhoneID` INT(5) NOT NULL , 
    `mobilePhoneID` INT(5) NULL DEFAULT NULL , 
    `emailAddressID` INT(5) NULL DEFAULT NULL , 
    INDEX `personID` (`personID` ASC) , 
    INDEX `homePhoneID` (`homePhoneID` ASC) , 
    INDEX `mobilePhoneID` (`mobilePhoneID` ASC) , 
    INDEX `emailAddressID` (`emailAddressID` ASC) , 
    CONSTRAINT `contact_ibfk_1` 
    FOREIGN KEY (`personID`) 
    REFERENCES `database_rugby`.`person` (`personID`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE, 
    CONSTRAINT `contact_ibfk_2` 
    FOREIGN KEY (`homePhoneID`) 
    REFERENCES `database_rugby`.`homePhone` (`homePhoneID`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE, 
    CONSTRAINT `contact_ibfk_3` 
    FOREIGN KEY (`mobilePhoneID`) 
    REFERENCES `database_rugby`.`mobilePhone` (`mobilePhoneID`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE, 
    CONSTRAINT `contact_ibfk_4` 
    FOREIGN KEY (`emailAddressID`) 
    REFERENCES `database_rugby`.`emailAddress` (`emailAddressID`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE) 
ENGINE = InnoDB; 


-- Create the "family" table. 
-- 
-- This is a linking table 
-- that describes the many:many 
-- relationship between "parent" 
-- and "player" tables. 
DROP TABLE IF EXISTS `database_rugby`.`family` ; 
CREATE TABLE IF NOT EXISTS `database_rugby`.`family` (
    `parentID` INT(5) NOT NULL , 
    `playerID` INT(5) NOT NULL , 
    `parent_parentID` INT(5) NOT NULL , 
    INDEX `playerID` (`playerID` ASC) , 
    INDEX `fk_family_parent1` (`parent_parentID` ASC) , 
    CONSTRAINT `family_ibfk_2` 
    FOREIGN KEY (`playerID`) 
    REFERENCES `database_rugby`.`player` (`playerID`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE, 
    CONSTRAINT `fk_family_parent1` 
    FOREIGN KEY (`parent_parentID`) 
    REFERENCES `database_rugby`.`parent` (`parentID`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 


-- Create the "qualificationSet" table. 
-- 
-- This is a linking table 
-- that describes the many:many 
-- relationship between "coach" 
-- and "coachQualification" tables. 
DROP TABLE IF EXISTS `database_rugby`.`qualificationSet` ; 
CREATE TABLE IF NOT EXISTS `database_rugby`.`qualificationSet` (
    `coachID` INT(5) NOT NULL , 
    `qualID` INT(5) NOT NULL , 
    INDEX `coachID` (`coachID` ASC) , 
    INDEX `qualID` (`qualID` ASC) , 
    CONSTRAINT `qualificationSet_ibfk_1` 
    FOREIGN KEY (`coachID`) 
    REFERENCES `database_rugby`.`coach` (`coachID`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE, 
    CONSTRAINT `qualificationSet_ibfk_2` 
    FOREIGN KEY (`qualID`) 
    REFERENCES `database_rugby`.`coachQualification` (`qualID`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE) 
ENGINE = InnoDB; 


-- Create the "team" table. 
DROP TABLE IF EXISTS `database_rugby`.`team` ; 
CREATE TABLE IF NOT EXISTS `database_rugby`.`team` (
    `teamID` INT(5) NOT NULL AUTO_INCREMENT , 
    `teamName` VARCHAR(50) NOT NULL , 
    `teamYear` INT(2) NOT NULL , 
    `gradeID` INT(5) NOT NULL , 
    PRIMARY KEY (`teamID`) , 
    INDEX `gradeID` (`gradeID` ASC) , 
    CONSTRAINT `team_ibfk_1` 
    FOREIGN KEY (`gradeID`) 
    REFERENCES `database_rugby`.`grade` (`gradeID`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE) 
ENGINE = InnoDB; 


-- Create the "teamAllocation" table 
-- 
-- this is a linking table for a 
-- many:many relationship between 
-- team and player tables. 
DROP TABLE IF EXISTS `database_rugby`.`teamAllocation` ; 

CREATE TABLE IF NOT EXISTS `database_rugby`.`teamAllocation` (
    `teamID` INT(5) NOT NULL , 
    `playerID` INT(5) NOT NULL , 
    INDEX `teamID` (`teamID` ASC) , 
    INDEX `playerID` (`playerID` ASC) , 
    CONSTRAINT `teamallocation_ibfk_1` 
    FOREIGN KEY (`teamID`) 
    REFERENCES `database_rugby`.`team` (`teamID`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE, 
    CONSTRAINT `teamAllocation_ibfk_2` 
    FOREIGN KEY (`playerID`) 
    REFERENCES `database_rugby`.`player` (`playerID`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE) 
ENGINE = InnoDB; 


-- Create the "teamCoachAllocation" table. 
-- 
-- This is a linking table 
-- that describes the many:many 
-- relationship between "coach" 
-- and "team" tables. 
DROP TABLE IF EXISTS `database_rugby`.`teamCoachAllocation` ; 
CREATE TABLE `database_rugby`.`teamCoachAllocation` (
    `coachID` INT(5) NOT NULL , 
    `teamID` INT(5) NOT NULL , 
    INDEX `coachID` (`coachID` ASC) , 
    INDEX `teamID` (`teamID` ASC) , 
    CONSTRAINT `teamCoachAllocation_ibfk_1` 
    FOREIGN KEY (`coachID`) 
    REFERENCES `database_rugby`.`coach` (`coachID`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE, 
    CONSTRAINT `teamCoachAllocation_ibfk_2` 
    FOREIGN KEY (`teamID`) 
    REFERENCES `database_rugby`.`team` (`teamID`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE) 
ENGINE = InnoDB; 

そして、ここでは私のDMLスクリプト(ノートです:これまでのスクリプトは唯一の「学校」、「人」にレコードを挿入しようとし、 「プレーヤー」の詳細私がこれまでに遭遇してきた問題が修正されている場合、これは後でのために私を助けることができる。):

-- database_data.sql. 
-- This sql script inserts data into the 
-- rugby club database. 

USE database_rugby; 

TRUNCATE TABLE database_rugby.person; 

-- Insert new persons which will be 
-- players. 
INSERT INTO database_rugby.person (
firstName, 
lastName, 
dateOfBirth, 
streetAddress, 
suburbAddress, 
cityAddress) 
VALUES(
"Michael", 
"Peck", 
'2002-12-10', 
"45 Skibo Street", 
"Caversham", 
"Dunedin"); 

INSERT INTO database_rugby.person (
firstName, 
lastName, 
dateOfBirth, 
streetAddress, 
suburbAddress, 
cityAddress) 
VALUES(
"Matt", 
"Petersen", 
'2001-06-15', 
"192 Bayview Road", 
"South Dunedin", 
"Dunedin"); 

INSERT INTO database_rugby.person (
firstName, 
lastName, 
dateOfBirth, 
streetAddress, 
suburbAddress, 
cityAddress) 
VALUES(
"Christopher", 
"Petersen", 
'2003-02-19', 
"192 Bayview Road", 
"South Dunedin", 
"Dunedin"); 

INSERT INTO database_rugby.person (
firstName, 
lastName, 
dateOfBirth, 
streetAddress, 
suburbAddress, 
cityAddress) 
VALUES(
"Richard", 
"Michaels", 
'2002-04-08', 
"15 Fitzroy Street", 
"Caversham", 
"Dunedin"); 

INSERT INTO database_rugby.person (
firstName, 
lastName, 
dateOfBirth, 
streetAddress, 
suburbAddress, 
cityAddress) 
VALUES(
"Shaun", 
"Michaels", 
'2003-11-11', 
"15 Fitzroy Street", 
"Caversham", 
"Dunedin"); 

INSERT INTO database_rugby.person (
firstName, 
lastName, 
dateOfBirth, 
streetAddress, 
suburbAddress, 
cityAddress) 
VALUES(
"Harry", 
"Dackers", 
'2004-02-11', 
"32 Peter Street", 
"Caversham", 
"Dunedin"); 

INSERT INTO database_rugby.person (
firstName, 
lastName, 
dateOfBirth, 
streetAddress, 
suburbAddress, 
cityAddress) 
VALUES(
"Daniel", 
"Mitchell", 
'2002-05-19', 
"112 South Road", 
"Caversham", 
"Dunedin"); 

-- Insert new persons which will be 
-- parents. 
INSERT INTO database_rugby.person (
firstName, 
lastName, 
dateOfBirth, 
streetAddress, 
suburbAddress, 
cityAddress) 
VALUES(
"Gregory", 
"Peck", 
'1971-07-22', 
"123 Burns Street", 
"South Dunedin", 
"Dunedin"); 


INSERT INTO database_rugby.person (
firstName, 
lastName, 
dateOfBirth, 
streetAddress, 
suburbAddress, 
cityAddress) 
VALUES(
"Laura", 
"Peck", 
'1979-09-08', 
"123 Burns Street", 
"South Dunedin", 
"Dunedin"); 

INSERT INTO database_rugby.person (
firstName, 
lastName, 
dateOfBirth, 
streetAddress, 
suburbAddress, 
cityAddress) 
VALUES(
"Martha", 
"Petersen", 
'1973-12-07', 
"192 Bayview Road", 
"South Dunedin", 
"Dunedin"); 

INSERT INTO database_rugby.person (
firstName, 
lastName, 
dateOfBirth, 
streetAddress, 
suburbAddress, 
cityAddress) 
VALUES(
"Chris", 
"Michaels", 
'1967-08-07', 
"15 Fitzroy Street", 
"Caversham", 
"Dunedin"); 

INSERT INTO database_rugby.person (
firstName, 
lastName, 
dateOfBirth, 
streetAddress, 
suburbAddress, 
cityAddress) 
VALUES(
"Nadine", 
"Michaels", 
'1973-10-19', 
"15 Fitzroy Street", 
"Caversham", 
"Dunedin"); 

INSERT INTO database_rugby.person (
firstName, 
lastName, 
dateOfBirth, 
streetAddress, 
suburbAddress, 
cityAddress) 
VALUES(
"Barry", 
"Dackers", 
'1965-02-11', 
"32 Peter Street", 
"Caversham", 
"Dunedin"); 

INSERT INTO database_rugby.person (
firstName, 
lastName, 
dateOfBirth, 
streetAddress, 
suburbAddress, 
cityAddress) 
VALUES(
"Kevin", 
"Mitchell", 
'1972-05-19', 
"112 South Road", 
"Caversham", 
"Dunedin"); 

INSERT INTO database_rugby.person (
firstName, 
lastName, 
dateOfBirth, 
streetAddress, 
suburbAddress, 
cityAddress) 
VALUES(
"Rebecca", 
"Mitchell", 
'1978-01-23', 
"112 South Road", 
"Caversham", 
"Dunedin"); 

-- Insert schools into school table. 
TRUNCATE TABLE database_rugby.school; 
INSERT INTO database_rugby.school(
schoolName) 
VALUES(
"College Street School"); 

INSERT INTO database_rugby.school(
schoolName) 
VALUES(
"Macandrew Intermediate School"); 

INSERT INTO database_rugby.school(
schoolName) 
VALUES(
"Carlton Hill Primary"); 

INSERT INTO database_rugby.school(
schoolName) 
VALUES(
"Caversham Primary School"); 

INSERT INTO database_rugby.school(
schoolName) 
VALUES(
"Concord School"); 

-- Insert players into player table. 
TRUNCATE TABLE database_rugby.player; 
INSERT INTO database_rugby.player(
personID, 
schoolID) 
VALUES(
    (SELECT personID FROM database_rugby.person 
    WHERE database_rugby.person(firstName) = "Michael" 
    AND database_rugby.person(lastName) = "Peck"), 
    (SELECT schoolID FROM database_rugby.school 
    WHERE database_rugby.school(schoolName) = "College Street School")); 

INSERT INTO database_rugby.player(
personID, 
schoolID) 
VALUES(
    (SELECT personID FROM database_rugby.person 
    WHERE database_rugby.person(firstName) = "Matt" 
    AND database_rugby.person(lastName) = "Petersen"), 
    (SELECT schoolID FROM database_rugby.school 
    WHERE database_rugby.school(schoolName) = "Macandrew Intermediate School")); 

INSERT INTO database_rugby.player(
personID, 
schoolID) 
VALUES(
    (SELECT personID FROM database_rugby.person 
    WHERE database_rugby.person(firstName) = "Christopher" 
    AND database_rugby.person(lastName) = "Petersen"), 
    (SELECT schoolID FROM database_rugby.school 
    WHERE database_rugby.school(schoolName) = "College Street School")); 

INSERT INTO database_rugby.player(
personID, 
schoolID) 
VALUES(
    (SELECT personID FROM database_rugby.person 
    WHERE database_rugby.person(firstName) = "Richard" 
    AND database_rugby.person(lastName) = "Michaels"), 
    (SELECT schoolID FROM database_rugby.school 
    WHERE database_rugby.school(schoolName) = "College Street School")); 

INSERT INTO database_rugby.player(
personID, 
schoolID) 
VALUES(
    (SELECT personID FROM database_rugby.person 
    WHERE database_rugby.person(firstName) = "Shaun" 
    AND database_rugby.person(lastName) = "Michaels"), 
    (SELECT schoolID FROM database_rugby.school 
    WHERE database_rugby.school(schoolName) = "College Street School")); 

INSERT INTO database_rugby.player(
personID, 
schoolID) 
VALUES(
    (SELECT personID FROM database_rugby.person 
    WHERE database_rugby.person(firstName) = "Harry" 
    AND database_rugby.person(lastName) = "Dackers"), 
    (SELECT schoolID FROM database_rugby.school 
    WHERE database_rugby.school(schoolName) = "Caversham Primary School")); 

INSERT INTO database_rugby.player(
personID, 
schoolID) 
VALUES(
    (SELECT personID FROM database_rugby.person 
    WHERE database_rugby.person(firstName) = "Daniel" 
    AND database_rugby.person(lastName) = "Mitchell"), 
    (SELECT schoolID FROM database_rugby.school 
    WHERE database_rugby.school(schoolName) = "Caversham Primary School")); 

そして、ここで2つのスクリプトから生成されたMySQLのコマンドラインインターフェイス上の出力があります - 。エラーに関する詳細情報が表示されます:

Welcome to the MySQL monitor. Commands end with ; or \g. 
Your MySQL connection id is 82 
Server version: 5.5.23 MySQL Community Server (GPL) 

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. 

Oracle is a registered trademark of Oracle Corporation and/or its 
affiliates. Other names may be trademarks of their respective 
owners. 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 

mysql> source c:\scripts\database_schema.sql 
Query OK, 16 rows affected (0.35 sec) 

Query OK, 1 row affected (0.03 sec) 

Database changed 
Query OK, 0 rows affected, 1 warning (0.00 sec) 

Query OK, 0 rows affected (0.06 sec) 

Query OK, 0 rows affected, 1 warning (0.00 sec) 

Query OK, 0 rows affected (0.06 sec) 

Query OK, 0 rows affected, 1 warning (0.00 sec) 

Query OK, 0 rows affected (0.04 sec) 

Query OK, 0 rows affected, 1 warning (0.00 sec) 

Query OK, 0 rows affected (0.07 sec) 

Query OK, 0 rows affected, 1 warning (0.00 sec) 

Query OK, 0 rows affected (0.06 sec) 

Query OK, 0 rows affected, 1 warning (0.00 sec) 

Query OK, 0 rows affected (0.06 sec) 

Query OK, 0 rows affected, 1 warning (0.01 sec) 

Query OK, 0 rows affected (0.09 sec) 

Query OK, 0 rows affected, 1 warning (0.00 sec) 

Query OK, 0 rows affected (0.06 sec) 

Query OK, 0 rows affected, 1 warning (0.01 sec) 

Query OK, 0 rows affected (0.07 sec) 

Query OK, 0 rows affected, 1 warning (0.00 sec) 

Query OK, 0 rows affected (0.07 sec) 

Query OK, 0 rows affected, 1 warning (0.00 sec) 

Query OK, 0 rows affected (0.10 sec) 

Query OK, 0 rows affected, 1 warning (0.00 sec) 

Query OK, 0 rows affected (0.06 sec) 

Query OK, 0 rows affected, 1 warning (0.00 sec) 

Query OK, 0 rows affected (0.08 sec) 

Query OK, 0 rows affected, 1 warning (0.00 sec) 

Query OK, 0 rows affected (0.06 sec) 

Query OK, 0 rows affected, 1 warning (0.00 sec) 

Query OK, 0 rows affected (0.10 sec) 

Query OK, 0 rows affected, 1 warning (0.01 sec) 

Query OK, 0 rows affected (0.07 sec) 

mysql> source c:\scripts\database_data.sql 
Database changed 
ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constrai 
nt (`database_rugby`.`contact`, CONSTRAINT `contact_ibfk_1` FOREIGN KEY (`person 
ID`) REFERENCES `database_rugby`.`person` (`personID`)) 
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint f 
ails (`database_rugby`.`person`, CONSTRAINT `fk_person_coach1` FOREIGN KEY (`coa 
ch_coachID2`) REFERENCES `coach` (`coachID`) ON DELETE NO ACTION ON UPDATE NO AC 
TION) 
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint f 
ails (`database_rugby`.`person`, CONSTRAINT `fk_person_coach1` FOREIGN KEY (`coa 
ch_coachID2`) REFERENCES `coach` (`coachID`) ON DELETE NO ACTION ON UPDATE NO AC 
TION) 
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint f 
ails (`database_rugby`.`person`, CONSTRAINT `fk_person_coach1` FOREIGN KEY (`coa 
ch_coachID2`) REFERENCES `coach` (`coachID`) ON DELETE NO ACTION ON UPDATE NO AC 
TION) 
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint f 
ails (`database_rugby`.`person`, CONSTRAINT `fk_person_coach1` FOREIGN KEY (`coa 
ch_coachID2`) REFERENCES `coach` (`coachID`) ON DELETE NO ACTION ON UPDATE NO AC 
TION) 
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint f 
ails (`database_rugby`.`person`, CONSTRAINT `fk_person_coach1` FOREIGN KEY (`coa 
ch_coachID2`) REFERENCES `coach` (`coachID`) ON DELETE NO ACTION ON UPDATE NO AC 
TION) 
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint f 
ails (`database_rugby`.`person`, CONSTRAINT `fk_person_coach1` FOREIGN KEY (`coa 
ch_coachID2`) REFERENCES `coach` (`coachID`) ON DELETE NO ACTION ON UPDATE NO AC 
TION) 
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint f 
ails (`database_rugby`.`person`, CONSTRAINT `fk_person_coach1` FOREIGN KEY (`coa 
ch_coachID2`) REFERENCES `coach` (`coachID`) ON DELETE NO ACTION ON UPDATE NO AC 
TION) 
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint f 
ails (`database_rugby`.`person`, CONSTRAINT `fk_person_coach1` FOREIGN KEY (`coa 
ch_coachID2`) REFERENCES `coach` (`coachID`) ON DELETE NO ACTION ON UPDATE NO AC 
TION) 
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint f 
ails (`database_rugby`.`person`, CONSTRAINT `fk_person_coach1` FOREIGN KEY (`coa 
ch_coachID2`) REFERENCES `coach` (`coachID`) ON DELETE NO ACTION ON UPDATE NO AC 
TION) 
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint f 
ails (`database_rugby`.`person`, CONSTRAINT `fk_person_coach1` FOREIGN KEY (`coa 
ch_coachID2`) REFERENCES `coach` (`coachID`) ON DELETE NO ACTION ON UPDATE NO AC 
TION) 
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint f 
ails (`database_rugby`.`person`, CONSTRAINT `fk_person_coach1` FOREIGN KEY (`coa 
ch_coachID2`) REFERENCES `coach` (`coachID`) ON DELETE NO ACTION ON UPDATE NO AC 
TION) 
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint f 
ails (`database_rugby`.`person`, CONSTRAINT `fk_person_coach1` FOREIGN KEY (`coa 
ch_coachID2`) REFERENCES `coach` (`coachID`) ON DELETE NO ACTION ON UPDATE NO AC 
TION) 
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint f 
ails (`database_rugby`.`person`, CONSTRAINT `fk_person_coach1` FOREIGN KEY (`coa 
ch_coachID2`) REFERENCES `coach` (`coachID`) ON DELETE NO ACTION ON UPDATE NO AC 
TION) 
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint f 
ails (`database_rugby`.`person`, CONSTRAINT `fk_person_coach1` FOREIGN KEY (`coa 
ch_coachID2`) REFERENCES `coach` (`coachID`) ON DELETE NO ACTION ON UPDATE NO AC 
TION) 
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint f 
ails (`database_rugby`.`person`, CONSTRAINT `fk_person_coach1` FOREIGN KEY (`coa 
ch_coachID2`) REFERENCES `coach` (`coachID`) ON DELETE NO ACTION ON UPDATE NO AC 
TION) 
ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constrai 
nt (`database_rugby`.`player`, CONSTRAINT `player_ibfk_1` FOREIGN KEY (`schoolID 
`) REFERENCES `database_rugby`.`school` (`schoolID`)) 
Query OK, 1 row affected (0.01 sec) 

Query OK, 1 row affected (0.01 sec) 

Query OK, 1 row affected (0.01 sec) 

Query OK, 1 row affected (0.00 sec) 

Query OK, 1 row affected (0.00 sec) 

ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constrai 
nt (`database_rugby`.`person`, CONSTRAINT `fk_person_player1` FOREIGN KEY (`play 
er_playerID2`) REFERENCES `database_rugby`.`player` (`playerID`)) 
ERROR 1305 (42000): FUNCTION database_rugby.person does not exist 
ERROR 1305 (42000): FUNCTION database_rugby.person does not exist 
ERROR 1305 (42000): FUNCTION database_rugby.person does not exist 
ERROR 1305 (42000): FUNCTION database_rugby.person does not exist 
ERROR 1305 (42000): FUNCTION database_rugby.person does not exist 
ERROR 1305 (42000): FUNCTION database_rugby.person does not exist 
ERROR 1305 (42000): FUNCTION database_rugby.person does not exist 
mysql> 

ここに論理モデルがあります(関係者に問題がある場合、特に多くの人と多くの関係があれば教えてください)。

enter image description here

私はあまりにも多くの情報を与えたが、私はこのすべての情報を与えた場合、それは私を助けたい人に物事を容易にするだろうと思った場合、私はお詫び申し上げます。私はDDLスクリプトを調整するのに3時間を費やしましたが、それを過ごした後、私は私を助ける多くの経験を持つ人が必要だと分かりました。私はデータベースの業界経験を持つ人物に論理モデルを示し、3NFに準拠していると信じています。概念モデルと論理モデルを自分で行うのはそれほど難しくありませんでした。論理モデルを作業スクリプトに変換し、最大のハードルになっているデータを挿入することができました(各テーブルに少なくとも10レコードを挿入したい)。

ありがとうございます!

+1

** minimal **のテストケースを作成することを強くお勧めします。つまり、テーブルの配置がずっと単純で、同じ問題が残っています。そうすれば、SOの聴衆がパースして理解するコードが少なくなる。 –

+0

@Oli - あなたはそこにいるのだが、スクリプト全体を見れば、問題の幅広い見方ができるかもしれないと思った。あなたはちょうど言ったことを満足させる方法でこの投稿をどのように編集できるか教えてください。私は、DDLスクリプト全体が必要だと思うが、私はこの例のDMLスクリプトをトリミングできると思う。論理モデルのイメージを提供して、そこにも矛盾がないかどうかを確認しました。 – Rob

答えて

3

はあなたにもこのステートメントを追加する必要が これは、外部キーチェックを無効にします

SET foreign_key_checks = 0; 

あなたのダンプファイルの先頭にそれを追加すると、簡単にダンプファイル

を実行して追加することができます外部キーチェックを有効にするためのダンプファイルの末尾にある別の文

SET foreign_key_checks = 1; 
+0

あなたのフィードバックのために多くの感謝 - 私は睡眠を取った後、午前中にこの最初の事を試し、それがどのように行ったかを教えてください:)。 – Rob

+0

こんにちはShakti、その行のコードはうまくいくように見えましたが、問題全体を修正しませんでした... "Person"のユニークな識別子を "Player"の主キーとすることは可能でしょうか「Player」の一意の識別子を使用していますか?もしそうなら、あなたは私に例を示すことができますか? – Rob

0

あなたが賭けた外部キー制約ween person(スーパークラス)およびplayer,parentおよびcoach(サブクラス)は、1:1リレーションシップを定義していません。ここでは可能な解決策である:

-- Create the "person" table. 
-- 
-- This table has one:one relationships 
-- with the parent, coach and player 
-- tables. 
DROP TABLE IF EXISTS `person` ;    --- no change 
CREATE TABLE `person` (
    `personID` INT(5) NOT NULL AUTO_INCREMENT , 
    --- ... 
    --- several columns omitted for clarity 
    --- ... 
    PRIMARY KEY (`personID`)) 
ENGINE = InnoDB; 

parent表はpersonに主キーおよび外部キーとしてpersonIDの両方を持つことができます。

playerため
-- Create the "parent" table. 
DROP TABLE IF EXISTS `parent` ; 
CREATE TABLE `parent` (
    --- `parentID` INT(5) NOT NULL ,    --- removed 

    `personID` INT(5) NOT NULL , 

    --- PRIMARY KEY (`parentID`, `personID`), --- removed 

    PRIMARY KEY (`personID`),     --- this part only as PK 
               --- which is also a FK 
    FOREIGN KEY (`personID`)      --- as previously (no change here) 
    REFERENCES `person` (`personID`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE) 
ENGINE = InnoDB; 

と同様:

-- Create the "school" table. 
-- omitted for clarity 
-- 
--  
-- Create the "player" table. 
-- 
-- Inherits fields from the "person" 
-- and "school" tables. 
DROP TABLE IF EXISTS `player` ; 
CREATE TABLE `player` (
    --- `playerID` INT(5) NOT NULL ,    --- removed 
    `personID` INT(5) NOT NULL , 
    `schoolID` INT(5) NOT NULL , 
    PRIMARY KEY (`personID`),     --- Primary Key 
    FOREIGN KEY (`personID`)      --- that is also Foreign Key 
    REFERENCES `person` (`personID`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE, 
    FOREIGN KEY (`schoolID`) 
    REFERENCES `school` (`schoolID`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE) 
ENGINE = InnoDB; 

同じcoachテーブルに入力する必要があります。上記溶液はpersonplayerparentまたは両方parentcoachの両方にすることができること


注意。スーパークラス(person)テーブルの行を1つのサブクラステーブルに制限する場合は、わずかに異なるアプローチにする必要があります。

関連する問題