2013-02-15 67 views
4
DROP SCHEMA IF EXISTS `YouthMinistry` ; 
CREATE SCHEMA IF NOT EXISTS `YouthMinistry` DEFAULT CHARACTER SET utf16 COLLATE utf16_general_ci ; 
USE `YouthMinistry` ; 

-- ----------------------------------------------------- 
-- Table `YouthMinistry`.`group` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `YouthMinistry`.`group` ; 

CREATE TABLE IF NOT EXISTS `YouthMinistry`.`group` (
    `groupid` INT NOT NULL AUTO_INCREMENT , 
    `group_name` VARCHAR(100) NOT NULL , 
    `group_desc` VARCHAR(255) NULL , 
    PRIMARY KEY (`groupid`)) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `YouthMinistry`.`groupmembers` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `YouthMinistry`.`groupmembers` ; 

CREATE TABLE IF NOT EXISTS `YouthMinistry`.`groupmembers` (
    `groupid` INT NOT NULL , 
    `memberid` INT NOT NULL , 
    PRIMARY KEY (`groupid`, `memberid`) , 
    INDEX `groupid_idx` (`groupid` ASC) , 
    CONSTRAINT `groupid` 
    FOREIGN KEY (`groupid`) 
    REFERENCES `YouthMinistry`.`group` (`groupid`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `YouthMinistry`.`role` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `YouthMinistry`.`role` ; 

CREATE TABLE IF NOT EXISTS `YouthMinistry`.`role` (
    `roleid` INT NOT NULL AUTO_INCREMENT , 
    `role_name` VARCHAR(100) NOT NULL , 
    `role_desc` VARCHAR(255) NULL , 
    PRIMARY KEY (`roleid`)) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `YouthMinistry`.`rolemembers` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `YouthMinistry`.`rolemembers` ; 

CREATE TABLE IF NOT EXISTS `YouthMinistry`.`rolemembers` (
    `roleid` INT NOT NULL , 
    `memberid` INT NOT NULL , 
    PRIMARY KEY (`roleid`, `memberid`) , 
    INDEX `groupid_idx` (`roleid` ASC) , 
    FOREIGN KEY (`roleid`) 
    REFERENCES `YouthMinistry`.`role` (`roleid`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `YouthMinistry`.`users` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `YouthMinistry`.`users` ; 

CREATE TABLE IF NOT EXISTS `YouthMinistry`.`users` (
    `memberid` INT NOT NULL AUTO_INCREMENT , 
    `username` VARCHAR(45) NOT NULL , 
    `password` VARCHAR(45) NOT NULL , 
    `email` VARCHAR(100) NULL , 
    `first_name` VARCHAR(45) NOT NULL , 
    `last_name` VARCHAR(45) NOT NULL , 
    `created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `updated` DATETIME NOT NULL , 
    PRIMARY KEY (`memberid`, `username`, `password`) , 
    UNIQUE INDEX `username_UNIQUE` (`username` ASC) , 
    INDEX `memberid_idx` (`memberid` ASC) , 
    INDEX `memberid_idx1` (`memberid` ASC) , 
    FOREIGN KEY (`memberid`) 
    REFERENCES `YouthMinistry`.`groupmembers` (`memberid`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE, 
    FOREIGN KEY (`memberid`) 
    REFERENCES `YouthMinistry`.`rolemembers` (`memberid`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `YouthMinistry`.`eventgroup` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `YouthMinistry`.`eventgroup` ; 

CREATE TABLE IF NOT EXISTS `YouthMinistry`.`eventgroup` (
    `eventid` INT NOT NULL , 
    `groupid` VARCHAR(45) NOT NULL , 
    PRIMARY KEY (`eventid`, `groupid`) , 
    INDEX `groupid_idx` (`groupid` ASC) , 
    FOREIGN KEY (`groupid`) 
    REFERENCES `YouthMinistry`.`group` (`groupid`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `YouthMinistry`.`event` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `YouthMinistry`.`event` ; 

CREATE TABLE IF NOT EXISTS `YouthMinistry`.`event` (
    `eventid` INT NOT NULL AUTO_INCREMENT , 
    `event_name` VARCHAR(255) NOT NULL , 
    `event_desc` VARCHAR(255) NULL , 
    PRIMARY KEY (`eventid`) , 
    INDEX `eventid_idx` (`eventid` ASC) , 
    FOREIGN KEY (`eventid`) 
    REFERENCES `YouthMinistry`.`eventgroup` (`eventid`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE) 
ENGINE = InnoDB; 

我正在一個錯誤代碼,當我運行創建腳本它給了我下面的錯誤: 錯誤代碼:1005無法創建表「youthministry.users」(錯誤:150)MySql錯誤:#105(代碼150)。當我創建我的數據庫架構我收到有關創建一個網站,我正在做一個數據庫的150

我看着下面源這個錯誤可能的解決方案: http://www.webdeveloper.com/forum/showthread.php?68260-mySQL-multiple-foreign-keys http://forums.devarticles.com/mysql-development-50/mysql-foreign-key-problem-errno-150t-7704.html

我已經檢查主鍵和外鍵聲明,以確保一切正確。

任何幫助,非常感謝。此外,這仍然是一個原型,並歡迎對初始架構的任何評論。我仍然是數據庫設計的新手。

回答

2

您只能在一個引用另一個表上的鍵的表上創建外鍵。此特定問題是memberid不是groupmembersrolemembers表中的密鑰。只需將KEY (memberid)添加到這些表格中,您就可以輕鬆前往。

外鍵類型必須匹配的另一個問題。 eventgroupgroupid varchar,但引用的是groups表,它有groupid INT。改正這一點。


至於建議,我強烈建議每個主鍵只有一列:您的自動增量代理鍵。你也應該使這些無符號整數。

+0

非常感謝。感謝您的建議,以及我已經修改了架構以將它們考慮在內。 – dmcqu314 2013-02-15 05:54:16

相關問題