我有两个表
Table1(
FileID,
BundledFileID,
Domain)
并且Table2(
FileID,
FileType,
FileName)
在Table2中,FileID
和FileType
是复合主键。我想从Table1.FileID
创建一个指向Table2
的外键关系。
这种操作是否可行?
我有两个表
Table1(
FileID,
BundledFileID,
Domain)
并且Table2(
FileID,
FileType,
FileName)
在Table2中,FileID
和FileType
是复合主键。我想从Table1.FileID
创建一个指向Table2
的外键关系。
这种操作是否可行?
由于Table2具有复合主键(FileID,FileType)
,因此对其的任何引用都必须包括这两个列。
ALTER TABLE dbo.Table1
ADD CONSTRAINT FK_Table1_Table2
FOREIGN KEY(FileID, FileType) REFERENCES Table2(FileID, FileType)
除非您在Table2.FileID
字段上有唯一约束/索引(但如果有,为什么不是主键?),否则无法创建到目标表主键的部分的FK关系-这只是无法做到。
FileType
列添加到Table1
中,以便创建FK关系。 - marc_sTable1
的主键中拥有两个列。如果FileID
确实是一个ID
(唯一的,可能是IDENTITY(1,1)
),那么通常不需要添加第二个列到你的主键中... - marc_s马克已经给出了一个相当不错的答案。如果Table1中的行仅与一种类型的文件(例如FileType 'ABC')相关,则可以将FileType添加为Table1的计算列:
ALTER TABLE Table1 ADD FileType as 'ABC'
然后你可以在外键中使用它。
我是使用SQL Server Management Studio完成的:
首先引用外键,然后创建组合主键。
在创建Table2时,一开始不要创建主键。 首先创建Table2.FileID与Table1.FileID的外键。然后为Table2设置组合键(Table2.FileID,Table2.FileType)。
如果FileType也需要成为外键,则遵循相同的概念。首先引用这两个外键,然后创建组合键。