Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 SQL Server 2005中具有复合主键的外键关系_Sql Server 2005_Foreign Key Relationship_Composite Primary Key - Fatal编程技术网

Sql server 2005 SQL Server 2005中具有复合主键的外键关系

Sql server 2005 SQL Server 2005中具有复合主键的外键关系,sql-server-2005,foreign-key-relationship,composite-primary-key,Sql Server 2005,Foreign Key Relationship,Composite Primary Key,我有两张桌子 Table1( FileID, BundledFileID, Domain) 及 在表2中,FileID和FileType是复合主键。我想创建一个从Table1.FileID到Table2的外键关系 可以这样做吗?因为表2有一个复合主键(FileID,FileType),所以对它的任何引用也必须包括两列 ALTER TABLE dbo.Table1 ADD CONSTRAINT FK_Table1_Table2 FOREIGN KEY(FileID, File

我有两张桌子

Table1(
  FileID,
  BundledFileID,
  Domain)

在表2中,
FileID
FileType
是复合主键。我想创建一个从
Table1.FileID
Table2
的外键关系


可以这样做吗?

因为表2有一个复合主键
(FileID,FileType)
,所以对它的任何引用也必须包括两列

ALTER TABLE dbo.Table1
  ADD CONSTRAINT FK_Table1_Table2
  FOREIGN KEY(FileID, FileType) REFERENCES Table2(FileID, FileType)

除非您在
Table2.FileID
字段上有一个唯一的约束/索引(但如果是这样的话:为什么这不是PK??),否则您不能只创建目标表上PK的一部分的FK关系-只是不能这样做。

marc已经给出了一个很好的答案。如果表1中的行仅与一种文件类型(例如文件类型“ABC”)相关,则可以将文件类型作为计算列添加到表1中:

ALTER TABLE Table1 ADD FileType as 'ABC'

然后可以在外键中使用。

这是标准SQL还是仅适用于MS SQL server?@Jus12:这是标准SQL,但Table1没有“文件类型”列,你的意思是他应该只为了创建约束而在表1中添加一列吗?@BornToCode:如果他希望能够使用外键引用该复合主键,那么他必须将
FileType
列添加到
Table1
中,这样他才能创建FK关系。我理解。这是否意味着,如果创建一个单独的表,其中FileID是主键,那么表设计可能会做得更好?复合键是外键。也就是说,为了使与表2的关系正常工作,您需要包含复合键中的所有列。
ALTER TABLE Table1 ADD FileType as 'ABC'