2013-02-15 2 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; 

내가 만들고있는 웹 사이트의 데이터베이스를 만드는 중입니다. 스크립트를 만들면 다음 오류가 표시됩니다. 오류 코드 :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

: 1005 테이블 'youthministry.users'(150 errno에를) 만들 수 없습니다 모든 것이 올바른지 확인하기 위해 기본 및 외래 키 선언을 검사했습니다.

도움을 주시면 감사하겠습니다. 또한이 프로토 타입은 여전히 ​​초기 스키마에 대한 모든 의견을 환영합니다. 나는 여전히 데이터베이스 디자인에 새로운 사람이다.

답변

2

다른 테이블의 키를 참조하는 하나의 테이블에만 외래 키를 만들 수 있습니다. 이 특정 문제는 memberidgroupmembers 또는 rolemembers 테이블의 키가 아님을 나타냅니다. 이 테이블에 KEY (memberid)을 추가하기 만하면됩니다.

외래 키 유형이 일치해야한다는 또 다른 문제가 있습니다. eventgroupgroupid varchar이지만 인 groups 테이블을 참조합니다. 이것을 바로 잡으십시오.


제안 사항으로, 각 기본 키는 하나의 열만 : 자동 증가 대리 키로하는 것이 좋습니다. 이러한 부호없는 정수도 만들어야합니다.

+0

감사합니다. 제안을 주셔서 감사합니다. 스키마를 수정하여 계정을 고려했습니다. – dmcqu314