0

I have designed the schema and generated the create SQL below using the MySQLWorkbench.

This query through this error: Can't create table 'museum.statue_details'. Could someone please tell me what seems to be the problem and how to solve it? Thanks.

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
    SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
    SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

    CREATE SCHEMA IF NOT EXISTS `museum` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
    USE `museum` ;

    -- -----------------------------------------------------
    -- Table `museum`.`collection`
    -- -----------------------------------------------------
    DROP TABLE IF EXISTS `museum`.`collection` ;

    CREATE TABLE IF NOT EXISTS `museum`.`collection` (
      `collection_id` INT NOT NULL,
      `name` VARCHAR(45) NULL,
      `type` VARCHAR(45) NULL,
      `description` VARCHAR(45) NULL,
      `address` VARCHAR(45) NULL,
      `phone` VARCHAR(45) NULL,
      `current_contact_person` VARCHAR(45) NULL,
      PRIMARY KEY (`collection_id`),
      UNIQUE INDEX `name_UNIQUE` (`name` ASC))
    ENGINE = InnoDB;


    -- -----------------------------------------------------
    -- Table `museum`.`country`
    -- -----------------------------------------------------
    DROP TABLE IF EXISTS `museum`.`country` ;

    CREATE TABLE IF NOT EXISTS `museum`.`country` (
      `country_id` INT NOT NULL,
      `country_name` VARCHAR(45) NULL,
      PRIMARY KEY (`country_id`))
    ENGINE = InnoDB;


    -- -----------------------------------------------------
    -- Table `museum`.`epoch`
    -- -----------------------------------------------------
    DROP TABLE IF EXISTS `museum`.`epoch` ;

    CREATE TABLE IF NOT EXISTS `museum`.`epoch` (
      `epoch_id` INT NOT NULL,
      `epoch_name` VARCHAR(45) NULL,
      PRIMARY KEY (`epoch_id`))
    ENGINE = InnoDB;


    -- -----------------------------------------------------
    -- Table `museum`.`artefact`
    -- -----------------------------------------------------
    DROP TABLE IF EXISTS `museum`.`artefact` ;

    CREATE TABLE IF NOT EXISTS `museum`.`artefact` (
      `artefact_id` INT NOT NULL,
      `collection_id` INT NOT NULL,
      `country_id` INT NOT NULL,
      `epoch_id` INT NOT NULL,
      `title` VARCHAR(50) NULL,
      `description` TEXT NULL,
      `year` DATE NULL,
      PRIMARY KEY (`artefact_id`, `collection_id`, `country_id`, `epoch_id`),
      INDEX `collection_id_idx` (`collection_id` ASC),
      INDEX `country_id_idx` (`country_id` ASC),
      INDEX `epoch_id_idx` (`epoch_id` ASC),
      CONSTRAINT `collection_id`
        FOREIGN KEY (`collection_id`)
        REFERENCES `museum`.`collection` (`collection_id`)
        ON DELETE RESTRICT
        ON UPDATE NO ACTION,
      CONSTRAINT `country_id`
        FOREIGN KEY (`country_id`)
        REFERENCES `museum`.`country` (`country_id`)
        ON DELETE RESTRICT
        ON UPDATE RESTRICT,
      CONSTRAINT `epoch_id`
        FOREIGN KEY (`epoch_id`)
        REFERENCES `museum`.`epoch` (`epoch_id`)
        ON DELETE RESTRICT
        ON UPDATE RESTRICT)
    ENGINE = InnoDB;


    -- -----------------------------------------------------
    -- Table `museum`.`painting_details`
    -- -----------------------------------------------------
    DROP TABLE IF EXISTS `museum`.`painting_details` ;

    CREATE TABLE IF NOT EXISTS `museum`.`painting_details` (
      `artefact_id` INT NOT NULL,
      `type` VARCHAR(45) NULL,
      `material` VARCHAR(45) NULL,
      `style` VARCHAR(45) NULL,
      PRIMARY KEY (`artefact_id`),
      CONSTRAINT `artefact_id`
        FOREIGN KEY (`artefact_id`)
        REFERENCES `museum`.`artefact` (`artefact_id`)
        ON DELETE RESTRICT
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;


    -- -----------------------------------------------------
    -- Table `museum`.`statue_details`
    -- -----------------------------------------------------
    DROP TABLE IF EXISTS `museum`.`statue_details` ;

    CREATE TABLE IF NOT EXISTS `museum`.`statue_details` (
      `artefact_id` INT NOT NULL,
      `material` VARCHAR(45) NULL,
      `height` DECIMAL(10,2) NULL,
      `weight` DECIMAL(10,2) NULL,
      `style` VARCHAR(45) NULL,
      PRIMARY KEY (`artefact_id`),
      CONSTRAINT `artefact_id`
        FOREIGN KEY (`artefact_id`)
        REFERENCES `museum`.`artefact` (`artefact_id`)
        ON DELETE RESTRICT
        ON UPDATE RESTRICT)
    ENGINE = InnoDB;


    -- -----------------------------------------------------
    -- Table `museum`.`relic_details`
    -- -----------------------------------------------------
    DROP TABLE IF EXISTS `museum`.`relic_details` ;

    CREATE TABLE IF NOT EXISTS `museum`.`relic_details` (
      `artefact_id` INT NOT NULL,
      `material` VARCHAR(45) NULL,
      `usage` VARCHAR(45) NULL,
      PRIMARY KEY (`artefact_id`),
      CONSTRAINT `artefact_id`
        FOREIGN KEY (`artefact_id`)
        REFERENCES `museum`.`artefact` (`artefact_id`)
        ON DELETE RESTRICT
        ON UPDATE RESTRICT)
    ENGINE = InnoDB;


    -- -----------------------------------------------------
    -- Table `museum`.`owner`
    -- -----------------------------------------------------
    DROP TABLE IF EXISTS `museum`.`owner` ;

    CREATE TABLE IF NOT EXISTS `museum`.`owner` (
      `owner_id` INT NOT NULL,
      `owner_name` VARCHAR(45) NULL,
      PRIMARY KEY (`owner_id`))
    ENGINE = InnoDB;


    -- -----------------------------------------------------
    -- Table `museum`.`other_artefact`
    -- -----------------------------------------------------
    DROP TABLE IF EXISTS `museum`.`other_artefact` ;

    CREATE TABLE IF NOT EXISTS `museum`.`other_artefact` (
      `artefact_id` INT NOT NULL,
      `name` VARCHAR(45) NULL,
      `description` TEXT NULL,
      PRIMARY KEY (`artefact_id`),
      CONSTRAINT `artifact_id`
        FOREIGN KEY (`artefact_id`)
        REFERENCES `museum`.`artefact` (`artefact_id`)
        ON DELETE RESTRICT
        ON UPDATE RESTRICT)
    ENGINE = InnoDB;


    -- -----------------------------------------------------
    -- Table `museum`.`borrowed_artefact`
    -- -----------------------------------------------------
    DROP TABLE IF EXISTS `museum`.`borrowed_artefact` ;

    CREATE TABLE IF NOT EXISTS `museum`.`borrowed_artefact` (
      `artefact_id` INT NOT NULL,
      `owner_id` INT NULL,
      `collection_id` INT NOT NULL,
      `date_borrowed` DATE NULL,
      `date_returned` DATE NULL,
      INDEX `owner_id_idx` (`owner_id` ASC),
      INDEX `artifact_id_idx` (`artefact_id` ASC),
      INDEX `collection_id_idx` (`collection_id` ASC),
      CONSTRAINT `artefact_id`
        FOREIGN KEY (`artefact_id`)
        REFERENCES `museum`.`artefact` (`artefact_id`)
        ON DELETE RESTRICT
        ON UPDATE RESTRICT,
      CONSTRAINT `owner_id`
        FOREIGN KEY (`owner_id`)
        REFERENCES `museum`.`owner` (`owner_id`)
        ON DELETE RESTRICT
        ON UPDATE RESTRICT,
      CONSTRAINT `collection_id`
        FOREIGN KEY (`collection_id`)
        REFERENCES `museum`.`collection` (`collection_id`)
        ON DELETE RESTRICT
        ON UPDATE RESTRICT)
    ENGINE = InnoDB;


    -- -----------------------------------------------------
    -- Table `museum`.`permenent_artefact`
    -- -----------------------------------------------------
    DROP TABLE IF EXISTS `museum`.`permenent_artefact` ;

    CREATE TABLE IF NOT EXISTS `museum`.`permenent_artefact` (
      `artefact_id` INT NOT NULL,
      `cost` DECIMAL(10,2) NULL,
      `status` VARCHAR(45) NULL,
      `date_acquired` DATE NULL,
      PRIMARY KEY (`artefact_id`),
      CONSTRAINT `artefact_id`
        FOREIGN KEY (`artefact_id`)
        REFERENCES `museum`.`artefact` (`artefact_id`)
        ON DELETE RESTRICT
        ON UPDATE RESTRICT)
    ENGINE = InnoDB;


    -- -----------------------------------------------------
    -- Table `museum`.`creator`
    -- -----------------------------------------------------
    DROP TABLE IF EXISTS `museum`.`creator` ;

    CREATE TABLE IF NOT EXISTS `museum`.`creator` (
      `creator_id` INT NOT NULL,
      `country_id` INT NULL COMMENT 'Country of origin',
      `epoch_id` INT NULL,
      `creator_name` VARCHAR(45) NULL COMMENT 'The creator name is unique',
      `creator_dob` DATE NULL COMMENT 'Date of birth',
      `creator_dod` DATE NULL COMMENT 'Date of died',
      `main_style` VARCHAR(45) NULL,
      `description` TEXT NULL,
      PRIMARY KEY (`creator_id`),
      UNIQUE INDEX `creator_name_UNIQUE` (`creator_name` ASC),
      CONSTRAINT `country_id`
        FOREIGN KEY (`creator_id`)
        REFERENCES `museum`.`country` (`country_id`)
        ON DELETE RESTRICT
        ON UPDATE RESTRICT,
      CONSTRAINT `epoch_id`
        FOREIGN KEY ()
        REFERENCES `museum`.`epoch` ()
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;


    -- -----------------------------------------------------
    -- Table `museum`.`created_artefact`
    -- -----------------------------------------------------
    DROP TABLE IF EXISTS `museum`.`created_artefact` ;

    CREATE TABLE IF NOT EXISTS `museum`.`created_artefact` (
      `artefact_id` INT NOT NULL,
      `creator_id` INT NULL,
      INDEX `creator_id_idx` (`creator_id` ASC),
      CONSTRAINT `artefact_id`
        FOREIGN KEY (`artefact_id`)
        REFERENCES `museum`.`artefact` (`artefact_id`)
        ON DELETE RESTRICT
        ON UPDATE RESTRICT,
      CONSTRAINT `creator_id`
        FOREIGN KEY (`creator_id`)
        REFERENCES `museum`.`creator` (`creator_id`)
        ON DELETE RESTRICT
        ON UPDATE RESTRICT)
    ENGINE = InnoDB;


    -- -----------------------------------------------------
    -- Table `museum`.`exhibition`
    -- -----------------------------------------------------
    DROP TABLE IF EXISTS `museum`.`exhibition` ;

    CREATE TABLE IF NOT EXISTS `museum`.`exhibition` (
      `exhibition_id` INT NOT NULL,
      `country_id` VARCHAR(45) NULL,
      `start_date` DATE NOT NULL,
      `end_date` DATE NOT NULL,
      PRIMARY KEY (`exhibition_id`))
    ENGINE = InnoDB;


    -- -----------------------------------------------------
    -- Table `museum`.`artifact_displayed_during_exhibition`
    -- -----------------------------------------------------
    DROP TABLE IF EXISTS `museum`.`artifact_displayed_during_exhibition` ;

    CREATE TABLE IF NOT EXISTS `museum`.`artifact_displayed_during_exhibition` (
      `exhibition_id` INT NOT NULL,
      `artefact_id` INT NULL,
      PRIMARY KEY (`exhibition_id`),
      INDEX `artifact_id_idx` (`artefact_id` ASC),
      CONSTRAINT `exhibition_id`
        FOREIGN KEY (`exhibition_id`)
        REFERENCES `museum`.`exhibition` (`exhibition_id`)
        ON DELETE RESTRICT
        ON UPDATE RESTRICT,
      CONSTRAINT `artefact_id`
        FOREIGN KEY (`artefact_id`)
        REFERENCES `museum`.`artefact` (`artefact_id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;


    SET SQL_MODE=@OLD_SQL_MODE;
    SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
    SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
1
  • Please paste the entire error. Commented Mar 22, 2014 at 8:53

3 Answers 3

3

You have many constraints with the same name,change them or let mysql name them.

CONSTRAINT `artefact_id` 

this repeats everywhere.There are others. Also in museum.creator you have missing columns:

 CONSTRAINT `epoch_id`
    FOREIGN KEY ()
    REFERENCES `museum`.`epoch` ()

You probably want epoch_id in between.All those fixed, it runs on my machine.

Sign up to request clarification or add additional context in comments.

Comments

1

you should give other name of your foreign keys like that:

insetead of

CONSTRAINT `artefact_id`
FOREIGN KEY (`artefact_id`)
REFERENCES `museum`.`artefact` (`artefact_id`)

do:

CONSTRAINT FK_mykey  --> give name as you like here to distinguich between others
FOREIGN KEY (`artefact_id`) 
REFERENCES `artefact` (`artefact_id`)

Comments

0

create table syntax:

http://dev.mysql.com/doc/refman/5.7/en/create-table.html

I believe the issue lies with you declaring the table name with {name1}.{name2}.

CREATE TABLE IF NOT EXISTS `collection` (
  `collection_id` INT NOT NULL,
  `name` VARCHAR(45) NULL,
  `type` VARCHAR(45) NULL,
  `description` VARCHAR(45) NULL,
  `address` VARCHAR(45) NULL,
  `phone` VARCHAR(45) NULL,
  `current_contact_person` VARCHAR(45) NULL,
  PRIMARY KEY (`collection_id`),
  UNIQUE INDEX `name_UNIQUE` (`name` ASC))
ENGINE = InnoDB;

`

worked for me

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.