SQl服务器 - 无法引用复合主键

时间:2018-04-23 07:19:15

标签: sql sql-server

我是SQL服务器的新手,我的表包含复合主键,如下所示:

CREATE TABLE Systems
(
Layer VARCHAR(25),
System_Name VARCHAR(25) ,
Sub_System_Name VARCHAR(25),
Q1_Scope VARCHAR(25),
Q2_Scope VARCHAR(25),
Q3_Scope VARCHAR(25),
Q4_Scope VARCHAR(25),
U20 VARCHAR(25),
Extracts_Requested VARCHAR(25),
Extracts_Received VARCHAR(25),
Control VARCHAR(25),
Extracts_Reviewed VARCHAR(25),
Control_Frequency VARCHAR(25),
System_Layer_Exists VARCHAR(25),
Notes VARCHAR(25),
Alias VARCHAR(25),
Extract_Requested_Date VARCHAR(25),
PRIMARY KEY (Layer,System_Name,Sub_System_Name)
);

现在我想将Layer,System_Name,Sub_System_Name等列引用到另一个表中:

CREATE TABLE Owns_System
(
Name VARCHAR(25) FOREIGN KEY REFERENCES Employees(Name),
 Layer VARCHAR(25) FOREIGN KEY REFERENCES Systems(Layer),
System_Name VARCHAR(25) FOREIGN KEY REFERENCES Systems(System_Name),
Sub_System_Name VARCHAR(25) FOREIGN KEY REFERENCES Systems(Sub_System_Name),
Role VARCHAR(25)
);

它显示了表Systems

的错误
  

“表格系统中没有主要/候选键。”

任何人都可以告诉我这里我做错了什么。

2 个答案:

答案 0 :(得分:1)

您不希望声明3个单独的外键约束 - 您需要使用单个复合外键:

CREATE TABLE Owns_System
(
Name VARCHAR(25) FOREIGN KEY REFERENCES Employees(Name),
Layer VARCHAR(25),
System_Name VARCHAR(25),
Sub_System_Name VARCHAR(25),
Role VARCHAR(25),
constraint FK_Blah FOREIGN KEY (Layer,System_Name,Sub_System_Name)
     REFERENCES Systems(Layer,System_Name,Sub_System_Name)
);

答案 1 :(得分:0)

  

FOREIGN KEY是一个表中的字段(或字段集合)   指另一个表中的PRIMARY KEY

所以在将一个表( PKA )作为另一个表( TableB )中的外键引用一个表( PKA )之前,你需要确保列 PKey TableA 中的 主键/唯一键

表格设计可能是这样的

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:BANDWIDTH=400000,NAME="low"
size1.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=800000,NAME="med"
size2.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1900000,NAME="best"
size3.m3u8

请参阅此W3 Schools链接,详细了解外键