2013-03-19 15 views
5

मैं अपने स्थानीय क्षेत्र में व्यापार लिस्टिंग के लिए एक एसक्यूएल डीबी डिजाइन कर रहा हूं। मैं डीबी डिज़ाइन करने के लिए mySQL वर्कबेंच का उपयोग कर रहा हूं, डीबी में किसी भी तालिका में से किसी एक के साथ मुझे कुछ समस्याएं क्यों नहीं मिल रही हैं।डेटाबेस तालिका नहीं बनाई जा रही है

इस डाटाबेस डिजाइन

enter image description here

मुद्दा मैं कर रहा हूँ BusinessHours साथ है कैसा दिखता है, मैं इसे abit भ्रमित लग रहा है क्योंकि मैं (प्रत्येक BusinessDirectory करने के लिए एक foregin कुंजी के साथ यह संबंधित करना चाहते हैं व्यापार निर्देशिका में कई बिजनेसहोर्स हैं) 'एक से कई' ताकि आप सप्ताह के 7 दिनों का प्रतिनिधित्व कर सकें। उम्मीद है कि समझ में आता है।

यह MySQL कार्यक्षेत्र

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 SQ[email protected]_SQL_MODE; 
SET [email protected]_FOREIGN_KEY_CHECKS; 
SET [email protected]_UNIQUE_CHECKS; 

तो मुझे उम्मीद थी कि कोई मुझे यह पता लगाने क्यों मैं अपने डाटाबेस के लिए BusinessHours तालिका जोड़ने में असमर्थ हूँ मदद कर सकते हैं उपयोग करते हुए उत्पन्न एसक्यूएल है।

यहाँ

enter image description here

enter image description here

किसी भी मदद की सराहना की जाएगी

अंतिम अपडेट किया गया एसक्यूएल मैं phpMyAdmin में reciving हूँ त्रुटि msgs दिखा दो स्क्रीनशॉट रहे हैं;

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 कुंजी टैब की तरह मदद लोग

उत्तर

1

विदेशी कुंजी के लिए बाधा नाम idBusinessDirectory के लिए

enter image description here

धन्यवाद तालिका BusinessHours और BusinessAddress में दोहराया है दिखना चाहिए है।

बाधा के लिए अलग नाम दें।

UPDATED

एक उचित 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) 

अपने सभी बाधाओं InnoDB में

REFER

इस INFORMATION_SCHEMA.KEY_COLUMN_USAGE में जमा हो जाती के साथ अपने कोड

उम्मीद है कि यह मदद करता है।

+0

idBusinessDirectory BusinessDirectory का पीके है, यह बिजनेस एड्रेस और बिजनेसहोर्स दोनों के लिए एफके होना चाहिए, क्या यह बदलना सही बात है यदि मैं इसे अपना एफके बनना चाहता हूं? – HurkNburkS

+0

MySQL वर्कबेंच इसे स्वचालित रूप से संभाल लेना चाहिए लेकिन यह –

+0

नहीं है आपको केवल बाधा का नाम बदलना होगा .... संपादन उत्तर देखें ... – Meherzad

संबंधित मुद्दे