【发布时间】:2021-01-02 22:04:21
【问题描述】:
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 ,
PersonID 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,0) NOT NULL,
[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 行
无法创建约束或索引。查看以前的错误
【问题讨论】:
-
使用分号结束语句
-
Thesis有一个指向Supervisor的 FK,但Supervisor中的 PK 有两列 - 如果您想用 FK 引用它,您必须提供子表中的两列也是如此。您可以不仅引用 PK 的一部分 - 全部(其中的每一列),或者您不能引用它。 -
我试过这个:外键 (SupervisorID) REFERENCES Supervisor(SupervisorID , PersonID) 但这不起作用。发生错误。 @marc_s
-
外键端也需要是两列。然而,在这种情况下,将
Supervisor设为主键和外键(到Person)的单列会更容易
标签: sql-server database foreign-keys composite-primary-key composite-key