Diagram wygląda tak:

Program generuje następujący kod SQL tworzący bazę danych:
Kod
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';
CREATE SCHEMA IF NOT EXISTS `address_db` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `address_db`;
-- -----------------------------------------------------
-- Table `address_db`.`city`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `address_db`.`city` (
`id` INT NOT NULL ,
`name` VARCHAR(45) NULL ,
PRIMARY KEY (`id`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `address_db`.`address`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `address_db`.`address` (
`id` INT NOT NULL ,
`city` VARCHAR(45) NULL ,
INDEX `fk_address_city` (`city` ASC) ,
PRIMARY KEY (`id`) ,
CONSTRAINT `fk_address_city`
FOREIGN KEY (`city` )
REFERENCES `address_db`.`city` (`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;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
CREATE SCHEMA IF NOT EXISTS `address_db` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `address_db`;
-- -----------------------------------------------------
-- Table `address_db`.`city`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `address_db`.`city` (
`id` INT NOT NULL ,
`name` VARCHAR(45) NULL ,
PRIMARY KEY (`id`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `address_db`.`address`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `address_db`.`address` (
`id` INT NOT NULL ,
`city` VARCHAR(45) NULL ,
INDEX `fk_address_city` (`city` ASC) ,
PRIMARY KEY (`id`) ,
CONSTRAINT `fk_address_city`
FOREIGN KEY (`city` )
REFERENCES `address_db`.`city` (`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;
Natomiast phpMyAdmin przy próbie uruchomienia tego kodu zwraca błąd:
Kod
Error
SQL query:
-- -----------------------------------------------------
-- Table `address_db`.`address`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `address_db`.`address` (
`id` INT NOT NULL ,
`city` VARCHAR( 45 ) NULL ,
INDEX `fk_address_city` ( `city` ASC ) ,
PRIMARY KEY ( `id` ) ,
CONSTRAINT `fk_address_city` FOREIGN KEY ( `city` ) REFERENCES `address_db`.`city` (
`id`
) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE = InnoDB;
MySQL said:
#1005 - Can't create table 'address_db.address' (errno: 150)
SQL query:
-- -----------------------------------------------------
-- Table `address_db`.`address`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `address_db`.`address` (
`id` INT NOT NULL ,
`city` VARCHAR( 45 ) NULL ,
INDEX `fk_address_city` ( `city` ASC ) ,
PRIMARY KEY ( `id` ) ,
CONSTRAINT `fk_address_city` FOREIGN KEY ( `city` ) REFERENCES `address_db`.`city` (
`id`
) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE = InnoDB;
MySQL said:
#1005 - Can't create table 'address_db.address' (errno: 150)
Czy ktoś mógłby mi wyjaśnić w czym leży problem i jak go naprawić?
Z góry dziękuję za pomoc.
Uwaga!
Jeśli nie jesteś w stanie znaleźć i wskazać błędu w powyższym zapytaniu SQL,
to uprzejmie proszę, nie wypowiadaj się.