2011-05-17 84 views
0

我正在尋找這個表的一點幫助。第一:該表不被mysql接受。我收到了150個錯誤,這個錯誤沒有告訴我很多。其次,我很確定我沒有使用最好的數據類型&的方式來處理事情....請給我一點輸入!創建表 - Mysql

CREATE TABLE IF NOT EXISTS `axis`.`Employee` (
`idEmployee` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT , 
`idAccount` INT(10) UNSIGNED NOT NULL , 
`user` VARCHAR(45) NULL DEFAULT NULL , 
`pass` VARCHAR(45) NULL DEFAULT NULL , 
`firstName` VARCHAR(45) NULL DEFAULT NULL , 
`lastName` VARCHAR(45) NULL DEFAULT NULL , 
`middleName` VARCHAR(45) NULL DEFAULT NULL , 
`idGrp` INT(10) UNSIGNED NULL DEFAULT NULL , 
`idCompany` INT(10) UNSIGNED NULL DEFAULT NULL , 
`idLocation` INT(10) UNSIGNED NULL DEFAULT NULL , 
`idUnit` INT(10) UNSIGNED NULL DEFAULT NULL , 
`idCrew` INT(10) UNSIGNED NULL DEFAULT NULL , 
`idPosition` INT(10) UNSIGNED NULL DEFAULT NULL , 
`officeLoc` VARCHAR(45) NULL DEFAULT NULL , 
`wPhone` VARCHAR(12) NULL DEFAULT NULL , 
`wCell` VARCHAR(12) NULL DEFAULT NULL , 
`wFax` VARCHAR(12) NULL DEFAULT NULL , 
`wEmail` VARCHAR(45) NULL DEFAULT NULL , 
`radio` VARCHAR(12) NULL DEFAULT NULL , 
`hPhone` VARCHAR(12) NULL DEFAULT NULL , 
`hCell` VARCHAR(12) NULL DEFAULT NULL , 
`hEmail` VARCHAR(45) NULL DEFAULT NULL , 
`addrOne` VARCHAR(45) NULL DEFAULT NULL , 
`addrTwo` VARCHAR(45) NULL DEFAULT NULL , 
`city` VARCHAR(45) NULL DEFAULT NULL , 
`state` VARCHAR(45) NULL DEFAULT NULL , 
`zip` VARCHAR(10) NULL DEFAULT NULL , 
`emergContact` VARCHAR(45) NULL DEFAULT NULL , 
`emergPhone` VARCHAR(12) NULL DEFAULT NULL , 
`gender` ENUM('male','female') NULL DEFAULT NULL , 
`birthDate` DATE NULL DEFAULT NULL , 
`ssn` VARCHAR(5) NULL DEFAULT NULL , 
`hireDate` DATE NULL DEFAULT NULL , 
`sepDate` DATE NULL DEFAULT NULL , 
`comment` VARCHAR(255) NULL DEFAULT NULL , 
`photo` MEDIUMBLOB NULL DEFAULT NULL , 
`isActive` BIT(1) NOT NULL DEFAULT 1 , 
`allowLogin` BIT(1) NOT NULL DEFAULT 0 , 
`trackTravel` BIT(1) NOT NULL DEFAULT 1 , 
`trackTimesheet` BIT(1) NOT NULL DEFAULT 1 , 
`defFltArr` VARCHAR(10) NULL DEFAULT NULL , 
`defFltDep` VARCHAR(10) NULL DEFAULT NULL , 
`defDayTimeStart` TIME NOT NULL DEFAULT '06:00:00' , 
`defHoursPerDay` DECIMAL(4,2) NOT NULL DEFAULT '11.50' , 
`userType` ENUM('root','admin','view','acl','report','employee') NOT NULL DEFAULT 'employee', 
`created` DATETIME NOT NULL , 
`modified` TIMESTAMP NOT NULL , 
`modifiedBy` INT(10) UNSIGNED NULL DEFAULT NULL , 
PRIMARY KEY (`idEmployee`, `idAccount`, `idGrp`, `idCompany`, `idLocation`, `idUnit`, `idCrew`, `idPosition`, `modifiedBy`) , 
UNIQUE INDEX `UNIQUE` (`idEmployee` ASC) , 
INDEX `fk_Employee_Grp` (`idGrp` ASC) , 
INDEX `fk_Employee_Company` (`idCompany` ASC) , 
INDEX `fk_Employee_Unit` (`idUnit` ASC) , 
INDEX `fk_Employee_Location` (`idLocation` ASC) , 
INDEX `fk_Employee_Crew` (`idCrew` ASC) , 
INDEX `fk_Employee_Position` (`idPosition` ASC) , 
INDEX `fk_Employee_Employee` (`modifiedBy` ASC) , 
CONSTRAINT `fk_Employee_Grp` 
FOREIGN KEY (`idGrp`) 
REFERENCES `axis`.`Grp` (`idGrp`) 
ON DELETE SET NULL 
ON UPDATE CASCADE, 
CONSTRAINT `fk_Employee_Company` 
FOREIGN KEY (`idCompany`) 
REFERENCES `axis`.`Company` (`idCompany`) 
ON DELETE SET NULL 
ON UPDATE CASCADE, 
CONSTRAINT `fk_Employee_Unit` 
FOREIGN KEY (`idUnit`) 
REFERENCES `axis`.`Unit` (`idUnit`) 
ON DELETE SET NULL 
ON UPDATE CASCADE, 
CONSTRAINT `fk_Employee_Location` 
FOREIGN KEY (`idLocation`) 
REFERENCES `axis`.`Location` (`idLocation`) 
ON DELETE SET NULL 
ON UPDATE CASCADE, 
CONSTRAINT `fk_Employee_Crew` 
FOREIGN KEY (`idCrew`) 
REFERENCES `axis`.`Crew` (`idCrew`) 
ON DELETE SET NULL 
ON UPDATE CASCADE, 
CONSTRAINT `fk_Employee_Position` 
FOREIGN KEY (`idPosition`) 
REFERENCES `axis`.`Position` (`idPosition`) 
ON DELETE SET NULL 
ON UPDATE CASCADE, 
CONSTRAINT `fk_Employee_Employee` 
FOREIGN KEY (`modifiedBy`) 
REFERENCES `axis`.`Employee` (`idEmployee`) 
ON DELETE SET NULL 
ON UPDATE CASCADE) 
ENGINE = InnoDB 
DEFAULT CHARACTER SET = utf8 
COLLATE = utf8_general_ci 
+0

還沒有,我正在使用mysql工作臺。是時候打ssh了。我會讓你知道我找到了什麼。 – 2011-05-17 03:02:27

回答

2

一個不少錯誤:

`idGrp` INT(10) UNSIGNED NULL DEFAULT NULL` 

然後

PRIMARY KEY (`idEmployee`, `idAccount`, `idGrp`, ...) 

(列是主鍵的部分必須NOT NULL - MySQL的默默使得not null, 終於

CONSTRAINT `fk_Employee_Grp` FOREIGN KEY (`idGrp`) 
REFERENCES `axis`.`Grp` (`idGrp`) ON DELETE SET NULL ON UPDATE CASCADE 

(這是不可能的 - ON DELETE SET NULL - 列爲not null

爲什麼要創建複合鍵? auto_increment列可以唯一標識您的記錄。其他所有東西都是多餘的。在某些情況下,對於MyIsam表(我不推薦使用它)可能是有意義的,因爲auto_increment列的值將以不同方式生成,如果它是組合索引的一部分,但不適用於INNODB引擎。

+0

這是一些非常棒的輸入......我不知道主鍵不能爲空,但它確實有意義。在編輯關係時,它看起來像mysql工作臺使所有外鍵成爲主鍵。看來我無法撤銷這一點。 – 2011-05-17 03:16:59

+0

這是問題所在!我將密鑰更改爲「無空」,並將「ON DELETE」更改爲「無操作」。如果外鍵必須不爲空,爲什麼會出現「set null」? – 2011-05-17 03:30:53

+0

外鍵列可以爲null,但如果它是主鍵的一部分,則它不能爲空。我同意,在這種情況下,mysql可能會生成一個更好的錯誤消息 – a1ex07 2011-05-17 03:39:17

0

呃,我可能是非常錯誤的,但是你允許有多個主鍵嗎?我認爲整個目的是它確實是一個主要(唯一)密鑰。

+0

是的,您可以合併列以創建複合主鍵 – 2011-05-17 02:54:14

+0

idEmployee在UNIQUE索引下列出。這不是它想要去的地方嗎? – 2011-05-17 02:59:55