таблица базы данных не создается
Я разрабатываю базу данных sql для бизнес-объявлений в моем регионе. Я использую MySQL WorkBench для проектирования БД, однако у меня возникли некоторые проблемы с тем, что одна из таблиц в БД не может быть создана.
Вот как выглядит дизайн бд
Проблема, с которой я сталкиваюсь, связана с бизнес-часами, я нахожу это немного запутанным, потому что я хочу связать это с ключом к бизнес-директории (в каждом бизнес-каталоге много бизнес-часов) "один к много", чтобы вы могли представлять 7 дней недели. Надеюсь, это имеет смысл.
Это sql, созданный с помощью MySQL workbench
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 `mydb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `mydb` ;
-- -----------------------------------------------------
-- Table `mydb`.`Members`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`Members` ;
CREATE TABLE IF NOT EXISTS `mydb`.`Members` (
`idMembers` INT NOT NULL AUTO_INCREMENT ,
`firstName` VARCHAR(45) NOT NULL ,
`lastName` VARCHAR(45) NOT NULL ,
`email` VARCHAR(45) NOT NULL ,
`password` VARCHAR(45) NOT NULL ,
PRIMARY KEY (`idMembers`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`BusinessDirectory`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`BusinessDirectory` ;
CREATE TABLE IF NOT EXISTS `mydb`.`BusinessDirectory` (
`idBusinessDirectory` INT NOT NULL ,
`businessName` VARCHAR(45) NOT NULL ,
`businessDescription` VARCHAR(1000) NULL ,
`businessLogo` VARCHAR(45) NULL ,
`idMembers` INT NULL ,
`directoryCategory` VARCHAR(45) NULL ,
PRIMARY KEY (`idBusinessDirectory`) ,
INDEX `idMembers_idx` (`idMembers` ASC) ,
CONSTRAINT `idMembers`
FOREIGN KEY (`idMembers` )
REFERENCES `mydb`.`Members` (`idMembers` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`BusinessAddress`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`BusinessAddress` ;
CREATE TABLE IF NOT EXISTS `mydb`.`BusinessAddress` (
`idBusinessDirectory` INT NOT NULL ,
`addressNumber` VARCHAR(5) NULL ,
`addressAreaName` VARCHAR(45) NULL ,
`addressLat` FLOAT(10,6) NULL ,
`addressLong` FLOAT(10,6) NULL ,
PRIMARY KEY (`idBusinessDirectory`) ,
CONSTRAINT `idBusinessDirectory`
FOREIGN KEY (`idBusinessDirectory` )
REFERENCES `mydb`.`BusinessDirectory` (`idBusinessDirectory` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`BusinessHours`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`BusinessHours` ;
CREATE TABLE IF NOT EXISTS `mydb`.`BusinessHours` (
`idBusinessDirectory` INT NOT NULL ,
`dayOfWeek` INT NULL ,
`openingTime` TIME NULL ,
`closingTime` TIME NULL ,
PRIMARY KEY (`idBusinessDirectory`) ,
CONSTRAINT `idBusinessDirectory`
FOREIGN KEY (`idBusinessDirectory` )
REFERENCES `mydb`.`BusinessDirectory` (`idBusinessDirectory` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
USE `mydb` ;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
Поэтому я надеялся, что кто-нибудь поможет мне понять, почему я не могу добавить таблицу businessHours в свою базу данных.
Вот два снимка экрана, показывающие сообщения об ошибках, которые я получаю в phpMyAdmin
Любая помощь будет признательна
Окончательный обновленный sql;
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 `mydb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `mydb` ;
-- -----------------------------------------------------
-- Table `mydb`.`Members`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`Members` ;
CREATE TABLE IF NOT EXISTS `mydb`.`Members` (
`idMembers` INT NOT NULL AUTO_INCREMENT ,
`firstName` VARCHAR(45) NOT NULL ,
`lastName` VARCHAR(45) NOT NULL ,
`email` VARCHAR(45) NOT NULL ,
`password` VARCHAR(45) NOT NULL ,
PRIMARY KEY (`idMembers`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`BusinessDirectory`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`BusinessDirectory` ;
CREATE TABLE IF NOT EXISTS `mydb`.`BusinessDirectory` (
`idBusinessDirectory` INT NOT NULL ,
`businessName` VARCHAR(45) NOT NULL ,
`businessDescription` VARCHAR(1000) NULL ,
`businessLogo` VARCHAR(45) NULL ,
`idMembers` INT NULL ,
`directoryCategory` VARCHAR(45) NULL ,
PRIMARY KEY (`idBusinessDirectory`) ,
INDEX `idMembers_idx` (`idMembers` ASC) ,
CONSTRAINT `idMembers`
FOREIGN KEY (`idMembers` )
REFERENCES `mydb`.`Members` (`idMembers` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`BusinessAddress`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`BusinessAddress` ;
CREATE TABLE IF NOT EXISTS `mydb`.`BusinessAddress` (
`idBusinessDirectory_BusinessAddress` INT NOT NULL ,
`addressNumber` VARCHAR(5) NULL ,
`addressAreaName` VARCHAR(45) NULL ,
`addressLat` FLOAT(10,6) NULL ,
`addressLong` FLOAT(10,6) NULL ,
PRIMARY KEY (`idBusinessDirectory_BusinessAddress`) ,
CONSTRAINT `idBusinessDirectory_BusinessAddress`
FOREIGN KEY (`idBusinessDirectory_BusinessAddress` )
REFERENCES `mydb`.`BusinessDirectory` (`idBusinessDirectory` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`BusinessHours`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `mydb`.`BusinessHours` ;
CREATE TABLE IF NOT EXISTS `mydb`.`BusinessHours` (
`idBusinessDirectory_BusinessHours` INT NOT NULL ,
`dayOfWeek` INT NULL ,
`openingTime` TIME NULL ,
`closingTime` TIME NULL ,
PRIMARY KEY (`idBusinessDirectory_BusinessHours`) ,
CONSTRAINT `idBusinessDirectory_BusinessHours`
FOREIGN KEY (`idBusinessDirectory_BusinessHours` )
REFERENCES `mydb`.`BusinessDirectory` (`idBusinessDirectory` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
USE `mydb` ;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
Вот что предвещает вкладка "клавиша" должна выглядеть как
Спасибо за помощь, ребята
1 answers
Имя ограничения idBusinessDirectory
для внешнего ключа повторяется в таблице BusinessHours
и BusinessAddress
.
Дайте ограничению другое имя.
ОБНОВЛЕНО
Следуйте правильному соглашению об именовании FK, чтобы такая ошибка никогда не появлялась, и просто по имени ограничения мы можем узнать таблицы, участвующие в ограничении.
fk_[referencing table name]_[referenced table name]_[referencing field name]
Таким образом, в вашем случае ограничения будут
РЕДАКТИРОВАТЬ Обновите свой код с помощью этого
BusinessAddress Table
CONSTRAINT `fk_BusinessAddress_BusinessDirectory_idBusinessDirectory`
FOREIGN KEY (`idBusinessDirectory` )
REFERENCES `mydb`.`BusinessDirectory` (`idBusinessDirectory` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
BusinessHours Table
CONSTRAINT `fk_BusinessHours_BusinessDirectory_idBusinessDirectory`
FOREIGN KEY (`idBusinessDirectory` )
REFERENCES `mydb`.`BusinessDirectory` (`idBusinessDirectory` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
Все ваши ограничения хранятся в это INFORMATION_SCHEMA.KEY_COLUMN_USAGE
в INNODB
ССЫЛАТЬСЯ
Надеюсь, это поможет.