2012-04-21 37 views
3

這是我第一次真正的破解制作第三範式的數據庫。我設法創建了DDL腳本(在我繼續構建腳本之前,我已將邏輯模型驗證爲3NF),但是我收到了很多我不確定修復的錯誤。我可能已經咬過這個特殊情況,但我不想放棄 - 這對我來說是一個很大的學習曲線,並且有一些幫助我可以通過這個過程繼續前進。在MySQL中獲取錯誤1701,錯誤1452和錯誤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")); 

下面是從兩個腳本生成的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

我道歉,如果我放棄了太多的信息,但我想如果我給所有這些信息,它會使事情上想幫助我的人更容易。我花了3個小時對DDL腳本進行了調整,但花了很長時間後,我意識到我需要有更多經驗的人來幫助我。我已經向具有數據庫行業經驗的人展示了邏輯模型,他們相信它符合3NF。做概念模型和邏輯模型對我來說並不是那麼糟糕,它試圖將邏輯模型轉換爲工作腳本,併成功插入數據(我想爲每個表插入至少10條記錄),這已成爲最大的障礙。

在此先感謝!

+1

我強烈建議你創建一個**最小**測試用例,即一個更簡單的表格排列等,仍然表現出同樣的問題。這樣,SO觀衆就可以更少的代碼來解析和理解...... – 2012-04-21 11:35:08

+0

@Oli - 你說得很對,我只是認爲展示整個腳本可能會讓人們對問題有更廣泛的認識。你能不能讓我知道如何以一種能夠滿足你剛纔所說的話來編輯這篇文章?我認爲整個DDL腳本是必要的,但我認爲我可以修剪這個例子的DML腳本。我還提供了邏輯模型的圖像,以查看是否存在任何差異。 – Rob 2012-04-21 11:40:24

回答

3

你必須添加此語句以及 它添加在你的轉儲文件的頂部

SET foreign_key_checks = 0; 

這將禁用外鍵檢查,你可以很容易地執行轉儲文件

,並添加在轉儲文件底部的另一個語句用於啓用外鍵檢查

SET foreign_key_checks = 1; 
+0

非常感謝您的反饋 - 在我睡了一覺之後,我會在早晨嘗試第一件事,並讓您知道它是如何發生的:)。 – Rob 2012-04-21 11:42:46

+0

嗨Shakti,那行代碼似乎工作正常,但沒有解決整個問題......我可能有「Person」的唯一標識符也是「Player」的主鍵聯合與「播放器」唯一標識符?如果是的話,你能向我展示一個例子嗎? – Rob 2012-04-22 03:02:44

0

您已經下注的外鍵約束person(超類)和player,parentcoach(子類)沒有定義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表可以同時作爲主鍵和外鍵personpersonID

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

,類似的還有player

-- 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表。


注意的是,上述解決方案允許person既一個playerparent或兩者parentcoach。如果你想限制超類(person)表的一行只是一個子類表,它必須是一個稍微不同的方法。