外键约束SQL

时间:2016-03-08 20:55:20

标签: sql foreign-keys

继续获取错误无法添加外键约束,任何想法可能都是noob错误,但我是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 个答案:

答案 0 :(得分:2)

第二个表中的

Extension必须为PRIMARY KEY

您可能希望实现多对多关系。在这种情况下,Extension中的PersonnelPhone应为FOREIGN KEYExtension中的tblPhone应为PRIMARY KEY

答案 1 :(得分: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