2013-03-19 27 views
5

Yerel bölgemdeki işletme listeleri için bir sql db tasarlıyorum. DB'yi tasarlamak için mySQL WorkBench'i kullanıyorum, DB'de yaratılamayan tablolardan biriyle nasıl sorun yaşıyorum. veritabanı tablosu oluşturulmuyor

Bu

Ben (her BusinessDirectory bir Foregin anahtarla ilişkilendirmek istiyorum çünkü ben abit kafa karıştırıcı buluyorum db tasarım yaşıyorum sorunu BusinessHours ile

enter image description here

neye benzediği businessDirectory’un birçok BusinessHours’u vardır, bunlardan birincisi, haftanın 7 gününü temsil edebilir. Umarım bu mantıklıdır.

Bu

Yani birileri benim db BusinessHours tablo eklemek alamıyorum bana neden anlamaya yardımcı olabileceğini umuyordum mySQL tezgahını

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; 

kullanılarak oluşturulan sql olduğunu. İşte

herhangi bir yardım

Final Güncelleme sql mutluluk duyacağız

enter image description here

enter image description here

Ben phpMyAdmin'de reciving am hata msj gösteren iki ekran vardır;

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; 

bu Foregin anahtar sekme masanın BusinessHours ve BusinessAddress içinde tekrarlanır yardım çocuklar

cevap

1

yabancı anahtar için kısıt adı idBusinessDirectory için

enter image description here

sayesinde gibi görünmelidir şeydir.

Kısıtlamaya farklı bir ad verin.

böyle hata açılır asla ve sadece kısıtlaması adıyla biz kısıtlaması ilişkin tablolar biliyor böylece

uygun FK adlandırma kuralı uygulayın GÜNCELLEME.

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

Yani sizin durumda kısıtlamaları

DÜZENLEME Güncelleme olacaktır Tüm kısıtlamalar

REFER

InnoDb bu INFORMATION_SCHEMA.KEY_COLUMN_USAGE saklanır bu

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) 

ile kod

Umarım yardımcı olur.

+0

idBusinessDirectory, BusinessDirectory'ın hem BusinessAddress hem de BusinessHours için FK olması gerekiyordu, bu benim FK'm olmasını istiyorsam değiştirmem gereken doğru şey mi? – HurkNburkS

+0

MySQL WorkBench bunu otomatik olarak ele almalı ama –

+0

değil Sadece kısıtlamanın adını değiştirmelisiniz .... Düzenlemenin cevabını kontrol et ... – Meherzad

İlgili konular