微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

创建引用复合键的外键

如何解决创建引用复合键的外键

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 行
无法创建约束或索引。查看以前的错误

this is part of the diagram I want to do.

解决方法

为什么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 举报,一经查实,本站将立刻删除。