如何解决创建引用复合键的外键
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 表更好。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。