0

我正在尝试创建一个数据库,其中包含员工信息,例如他们的姓名、时间表、预订的假期等,以及有关正在执行的项目和项目所在公司的信息。我的代码如下:

    CREATE TABLE IF NOT EXISTS tblcompany (
    companyid INT(11) UNSIGNED NOT NULL,
    custfirst VARCHAR(50),
    custlast VARCHAR(50),
    company VARCHAR(50),
    custphone VARCHAR(50),
    custemail VARCHAR(50),
    PRIMARY KEY (companyid),
    INDEX (companyid),
    CONSTRAINT FOREIGN KEY (companyid)
        REFERENCES tblproject (companyid)
)  ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS tblemployee (
    employeeid INT(11) UNSIGNED NOT NULL,
    employeefirst VARCHAR(50),
    employeelast VARCHAR(50),
    employeephone VARCHAR(50),
    employeeemail VARCHAR(50),
    PRIMARY KEY (employeeid),
    INDEX (employeeid),
    CONSTRAINT FOREIGN KEY (employeeid)
        REFERENCES tbltimesheet (employeeid),
    CONSTRAINT FOREIGN KEY (employeeid)
        REFERENCES tblholiday (employeeid),
    CONSTRAINT FOREIGN KEY (employeeid)
        REFERENCES tblannualleave (employeeid)
)  ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS tblholiday (
    holidayid INT(11) UNSIGNED NOT NULL,
    employeeid INT(11) UNSIGNED NOT NULL,
    holidayfrom DATE,
    holidayto DATE,
    holidayhalfday BOOLEAN,
    holidayreason VARCHAR(50),
    INDEX (employeeid),
    PRIMARY KEY (holidayid)
)  ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS tblannualleave (
    annualleaveid INT(11) UNSIGNED NOT NULL,
    employeeid INT(11) UNSIGNED NOT NULL,
    annualleavetaken INT(11),
    annualleaveremain INT(11),
    anuualleavetotal INT(11),
    INDEX (employeeid),
    PRIMARY KEY (annualleaveid)
)  ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS tblproject (
    projectid INT(11) UNSIGNED NOT NULL,
    projectname VARCHAR(50),
    projecttype VARCHAR(50),
    companyid INT(11) UNSIGNED NOT NULL,
    projectnotes VARCHAR(50),
    PRIMARY KEY (projectid),
    INDEX (projectid),
    CONSTRAINT FOREIGN KEY (projectid)
        REFERENCES tbltimesheet (projectid)
)  ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS tbltimesheet (
    timesheetid INT(11) UNSIGNED NOT NULL,
    employeeid INT(11) UNSIGNED NOT NULL,
    projectid INT(11) UNSIGNED NOT NULL,
    timesheetdate DATE,
    timesheethours INT(11),
    timesheetnotes VARCHAR(50),
    INDEX (employeeid),
    PRIMARY KEY (timesheetid)
)  ENGINE=InnoDB;

我一直在环顾四周并尝试了所有方法,这可能就是这么简单。我已将所有数据类型更改为类似的数据类型,看看这是否能解决问题,但没有运气。我得到的错误代码是:

错误代码:1215。无法添加外键约束 0.063 秒


如果不存在则创建表), INDEX (companyid),
CONSTRAINT FOREIGN KEY (companyid) REFERENCES tblproject (companyid) ) ENGINE=InnoDB

11:15:57 如果 tblcompany 不存在则创建表( companyid INT(11) UNSIGNED NOT NULL,custfirst VARCHAR(50),custlast VARCHAR(50),company VARCHAR(50),custphone VARCHAR(50),
custemail VARCHAR(50) , PRIMARY KEY (companyid), INDEX (companyid), CONSTRAINT FOREIGN KEY (companyid) REFERENCES tblproject (companyid) ) ENGINE=InnoDB 错误代码: 1215. 无法添加外键约束 0.063 sec

谢谢你看。。

4

3 回答 3

3

在引用它之前先创建表 tblproject。

除了错误的表顺序外,您还需要引用列的主键或唯一键。

SQL小提琴

于 2013-11-13T11:27:22.007 回答
0

当它引用的表还不存在时,您不能创建外键。您可以随时创建外键。

在使用外键创建表之后,您必须首先创建包含引用字段的表。

您也可以首先创建所有表,然后在第二步中创建所有外键。

于 2013-11-13T11:31:18.847 回答
0

我认为您将解决以相反的顺序创建表的问题,否则您将遇到与 tblemployee 相同的问题。

Foreigh Key 需要参考表已经存在。

于 2013-11-13T11:30:11.307 回答