58

我有两张桌子

Table1(
  FileID,
  BundledFileID,
  Domain)

Table2(
  FileID,
  FileType,
  FileName)

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

是否有可能做到这一点?

4

3 回答 3

98

由于 Table2 有一个复合主键(FileID, FileType),因此对它的任何引用也必须包括这两个列

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

除非您在该字段上有一个唯一的约束/索引Table2.FileID(但如果是这样:为什么这不是 PK ? .

于 2010-10-22T12:45:05.547 回答
4

马克已经给出了一个很好的答案。如果 Table1 中的行只与一种类型的文件相关(例如 FileType 'ABC'),那么您可以将 FileType 作为计算列添加到 Table1:

ALTER TABLE Table1 ADD FileType as 'ABC'

然后您可以在外键中使用它。

于 2010-10-22T12:54:40.097 回答
0

我使用 SQL Server Management Studio 做到了这一点:

先引用外键,再做复合主键。

创建 Table2 时,一开始就不要创建主键。首先用Table1.FileID创建Table2.FileID的外键。然后设置 Table2 的复合键(Table2.FileID,Table2.FileType)。

如果 FileType 也需要是外键,则同样的概念也适用。首先引用两个外键,然后创建复合键。

于 2022-02-11T12:40:21.600 回答