问题描述
CREATE TABLE Person
(
PersonID int NOT NULL IDENTITY,PersonName nvarchar(30) NOT NULL,PersonSurname nvarchar(30) NOT NULL,PRIMARY KEY (PersonID)
)
CREATE TABLE Author
(
AuthorID int NOT NULL IDENTITY,PersonID int NOT NULL,PRIMARY KEY (AuthorID),FOREIGN KEY (PersonID) REFERENCES Person(PersonID)
)
CREATE TABLE Supervisor
(
SupervisorID int NOT NULL,PRIMARY KEY (SupervisorID,PersonID),FOREIGN KEY (PersonID) REFERENCES Person(PersonID)
)
CREATE TABLE University
(
UniversityID int NOT NULL IDENTITY,UniversityName nvarchar(100) NOT NULL,PRIMARY KEY (UniversityID)
)
CREATE TABLE Enstitute
(
EnstituteID int NOT NULL IDENTITY,UniversityID int NOT NULL,EnstituteName nvarchar(100),PRIMARY KEY (EnstituteID),FOREIGN KEY (UniversityID) REFERENCES University(UniversityID)
)
CREATE TABLE Thesis
(
ThesisNo numeric(8,0) NOT NULL IDENTITY,AuthorID int NOT NULL,EnstituteID int NOT NULL,SupervisorID int NOT NULL,Title nvarchar(100)NOT NULL,Abstract nvarchar(500)NOT NULL,Pages int NOT NULL,SubmitDate datetime NOT NULL,[Type] nchar(30) NOT NULL,[Language] nchar(20) NOT NULL
PRIMARY KEY (ThesisNo),FOREIGN KEY (EnstituteID) REFERENCES Enstitute(EnstituteID),FOREIGN KEY (AuthorID) REFERENCES Author(AuthorID),FOREIGN KEY (SupervisorID) REFERENCES Supervisor(SupervisorID)
)
CREATE TABLE Keywords
(
ThesisNo numeric(8,0) NOT NULL,Keyword nvarchar(50) NULL,FOREIGN KEY (ThesisNo) REFERENCES Thesis(ThesisNo)
)
CREATE TABLE Subjects
(
SubjectID int NOT NULL,ThesisNo numeric(8,[Subject] nvarchar(120) NOT NULL,PRIMARY KEY (SubjectID),FOREIGN KEY (ThesisNo) REFERENCES Thesis(ThesisNo)
)
我收到此错误:
消息 1767,级别 16,状态 0,第 38 行
外键 'FK__Thesis__AuthorID__47DBAE45' 引用了无效的表 'Author'。
消息 1750,级别 16,状态 1,第 38 行
无法创建约束或索引。查看以前的错误
解决方法
为什么Supervisor有一个复合键。它看起来像 Person 的子类型,应该共享相同的密钥结构。例如
CREATE TABLE Supervisor
(
PersonID int NOT NULL,PRIMARY KEY (PersonID),FOREIGN KEY (PersonID) REFERENCES Person(PersonID)
)
也是作者
CREATE TABLE Author
(
PersonID int NOT NULL,PRIMARY KEY (PersonID ),FOREIGN KEY (PersonID) REFERENCES Person(PersonID)
)
虽然通常只有一个 Person 表更好。