2013-03-19 11 views
5

私は自分のローカルエリアにビジネスリスティングのためのSQLデータベースを設計しています。 DBを設計するためにmySQL WorkBenchを使用していますが、DB内のテーブルの1つに何らかの問題が発生していて、どのようにして作成できないのでしょうか。データベーステーブルが作成されていません

これは、DBの設計が

enter image description here

どのように見えるか私が午前問題はBusinessHoursであるが、私は私がBusinessDirectoryにForeginキー(それぞれでそれを関連付けるしたいので、それは混乱ABIT探していますbusinessDirectoryには多くのBusinessHoursがあります)、1日に7日間を表すことができるように、「1対多」。希望は意味をなさない。

この

は、だから私は、誰かが私は私のデシベルにBusinessHoursテーブルを追加することができませんなぜ私が把握助けることができることを期待していたMySQLのワークベンチ

SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0; 
SET @OLD_FOREIGN_KE[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; 
SET @[email protected]@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 [email protected]_SQL_MODE; 
SET [email protected]_FOREIGN_KEY_CHECKS; 
SET [email protected]_UNIQUE_CHECKS; 

を使用して生成されたSQLです。ここで

は、私はphpMyAdminの

enter image description here

enter image description here

に任意のヘルプをrecivingていますエラーMSGのを示す2つのスクリーンショットが

最終更新されたSQLをいただければ幸いです。

SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0; 
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; 
SET @[email protected]@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 [email protected]_SQL_MODE; 
SET [email protected]_FOREIGN_KEY_CHECKS; 
SET [email protected]_UNIQUE_CHECKS; 

これはForeginキータブが表BusinessHoursBusinessAddressで繰り返されるヘルプみんな

答えて

1

外部キーの制約名idBusinessDirectoryため

enter image description here

おかげでどのように見えるかです。

制約に異なる名前を付けます。

を更新し、このようなエラーがポップアップ表示されませんし、ちょうど制約の名前で私たちが制約に含まれるテーブルを知ることができるように、適切なFKの命名規則に従ってください。

fk_[referencing table name]_[referenced table name]_[referencing field name] 

だからあなたの場合には制約が

EDITこの

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) 

を使用してコードを更新あなたのすべての制約がINNODB

REFER

でこの INFORMATION_SCHEMA.KEY_COLUMN_USAGEに格納されているだろう

希望します。

+0

idBusinessDirectoryはBusinessAddressとBusinessHoursの両方のFKとされていたBusinessDirectoryのPKです。私がFKであることを望むのであれば、それは正しいことですか? – HurkNburkS

+0

MySQL WorkBenchはこれを自動的に処理する必要がありますが、 –

+0

ではありません。制約の名前を変更する必要があります....編集の回答を確認してください... – Meherzad

関連する問題