2013-03-19 10 views
5

Projektuję dbl db dla list firm w mojej okolicy. Używam mySQL WorkBench do projektowania DB, jakkolwiek mam problemy z jedną z tabel w DB nie można utworzyć.Nie utworzono tabeli bazy danych

To właśnie projekt db wygląda

enter image description here

Problem mam jest z businesshours, jestem znajdowanie abit mylące, ponieważ chcę, aby powiązać je z zagranicznymi klucz do katalogu firm (każdy businessDirectory ma wiele BusinessHours) "jeden do wielu", dzięki czemu możesz reprezentować 7 dni w tygodniu. Mam nadzieję, że ma to sens.

To SQL generowane przy użyciu MySQL Workbench

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

więc miałem nadzieję, że ktoś może mi pomóc dowiedzieć się, dlaczego nie mogę dodać do mojego stolika businesshours db.

Oto dwa screeny pokazujące wiad błędach jestem reciving w phpMyAdmin

enter image description here

enter image description here

Każda pomoc będzie mile widziane

końcowy Aktualizacja 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; 

to właśnie karta klucz foregin powinien wyglądać

enter image description here

dzięki za pomoc chłopaki

Odpowiedz

1

Nazwa ograniczenie idBusinessDirectory dla klucza obcego jest powtarzany w tabeli BusinessHours i BusinessAddress.

Podaj inną nazwę ograniczenia.

AKTUALIZACJA

Wykonaj odpowiednią konwencję nazewnictwa FK tak, że taki błąd nie wyskakuje i po prostu o nazwie przymusu możemy wiedzieć tabele zaangażowanych w ograniczenie.

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

Więc w twoim przypadku ograniczenia będą

EDIT zaktualizować kod z tego

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) 

Wszystkie twoje ograniczenia są zawarte w tym INFORMATION_SCHEMA.KEY_COLUMN_USAGE w InnoDB

REFER

Mam nadzieję, że to pomaga.

+0

idBusinessDirectory jest PK BusinessDirectory miał być FK zarówno dla BusinessAddress i BusinessHours, czy jest to prawo do zmiany, jeśli chcę, aby to mój FK? – HurkNburkS

+0

MySQL WorkBench powinien obsłużyć to automatycznie, ale nie musi –

+0

Musisz tylko zmienić nazwę ograniczenia .... Sprawdź edytowaną odpowiedź ... – Meherzad

Powiązane problemy