我有两张桌子
Table1(
FileID,
BundledFileID,
Domain)
和
Table2(
FileID,
FileType,
FileName)
在表 2 中FileID
和FileType
是复合主键。我想从 to 创建一个外键Table1.FileID
关系Table2
。
是否有可能做到这一点?
我有两张桌子
Table1(
FileID,
BundledFileID,
Domain)
和
Table2(
FileID,
FileType,
FileName)
在表 2 中FileID
和FileType
是复合主键。我想从 to 创建一个外键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
(但如果是这样:为什么这不是 PK ? .
马克已经给出了一个很好的答案。如果 Table1 中的行只与一种类型的文件相关(例如 FileType 'ABC'),那么您可以将 FileType 作为计算列添加到 Table1:
ALTER TABLE Table1 ADD FileType as 'ABC'
然后您可以在外键中使用它。
我使用 SQL Server Management Studio 做到了这一点:
先引用外键,再做复合主键。
创建 Table2 时,一开始就不要创建主键。首先用Table1.FileID创建Table2.FileID的外键。然后设置 Table2 的复合键(Table2.FileID,Table2.FileType)。
如果 FileType 也需要是外键,则同样的概念也适用。首先引用两个外键,然后创建复合键。