2016-03-08 178 views
0

继续收到错误无法添加外键约束,任何想法可能是noob错误,但我是SQL新手。外键约束SQL

CREATE TABLE tblDept (

    Dept VARCHAR(50), 
    Name VARCHAR(50) 
); 

CREATE TABLE tblPersonnel (

    PersID INT PRIMARY KEY, 
    FullName VARCHAR(100), 
    Address VARCHAR(100), 
    Dept VARCHAR(50), 
    Grade VARCHAR (2), 
    Salary INT, 
    DateOfBirth DATE, 
    Manager INT, 
    FOREIGN KEY(Dept) REFERENCES tblDept(Dept) 

); 

CREATE TABLE PersonnelPhone (

    PersID INT, 
    Extension INT, 
    FOREIGN KEY (PersID) REFERENCES tblPersonnel(PersID) 
    ); 

CREATE TABLE tblPhone (
    Extension INT, 
    DeviceType VARCHAR, 
    VoiceMail BOOLEAN, 
    FOREIGN KEY (Extension) REFERENCES tblPersonnelPhone(Extension) 
    ); 

回答

2

Extension在第二个表必须是PRIMARY KEY

您可能想要实现多对多的关系。在这种情况下,ExtensionPersonnelPhone应该是FOREIGN KEYExtensiontblPhone应该是PRIMARY KEY

+0

同上,'Dept'第一表格,在第二个表中定义的外键使用。 –

+0

非常感谢您的帮助!现在有道理,我失去了小时,这个哈哈 –

2

那里有几个错误。这里有一个工作模式定义:

CREATE TABLE tblDept (
    Dept VARCHAR(50) PRIMARY KEY, 
    Name VARCHAR(50) 
); 

CREATE TABLE tblPersonnel (
    PersID INT PRIMARY KEY, 
    FullName VARCHAR(100), 
    Address VARCHAR(100), 
    Dept VARCHAR(50), 
    Grade VARCHAR(2), 
    Salary INT, 
    DateOfBirth DATE, 
    Manager INT, 
    FOREIGN KEY(Dept) REFERENCES tblDept(Dept) 
); 

CREATE TABLE tblPersonnelPhone (
    PersID INT, 
    Extension INT PRIMARY KEY, 
    FOREIGN KEY (PersID) REFERENCES tblPersonnel(PersID) 
); 

CREATE TABLE tblPhone (
    Extension INT, 
    DeviceType VARCHAR(100), 
    VoiceMail BOOLEAN, 
    FOREIGN KEY (Extension) REFERENCES tblPersonnelPhone(Extension) 
); 

以供将来参考,使用SQLFiddle分享这些类型的问题:http://sqlfiddle.com/#!9/2ce29

+0

非常感谢您的帮助和时间,其高度赞赏,也谢谢我将书签该网站。 –

+0

您好,欢迎来到@AaronLyall – Max