我有两个非常简单的表。
-- Create a new table called '[Events]' in schema '[dbo]'
-- Drop the table if it already exists
DROP TABLE IF EXISTS [dbo].[Events]
GO
-- Create the table in the specified schema
CREATE TABLE [dbo].[Events]
(
[Id] INT NOT NULL PRIMARY KEY IDENTITY, -- Primary Key column
[ImportTypeId] INT NULL
REFERENCES [dbo].[ImportTypes](Id),
[ImportId] NVARCHAR(50) NULL,
[Title] NVARCHAR(512) NOT NULL,
[Description] NVARCHAR(2048) NOT NULL,
CONSTRAINT UQ_Events UNIQUE (ImportId, ImportTypeId),
INDEX IX_EventTitle ([Title] ASC)
);
GO
-- Create a new table called '[Events]' in schema '[eventful]'
-- Drop the table if it already exists
DROP TABLE IF EXISTS [eventful].[Events]
GO
-- Create the table in the specified schema
CREATE TABLE [eventful].[Events]
(
[EventfulId] NVARCHAR(50) NOT NULL
REFERENCES [dbo].[Events](ImportId),
[ImportDate] DATETIME NOT NULL DEFAULT(GETUTCDATE()),
[LastImportDate] DATETIME NULL,
[Url] NVARCHAR(2048) NULL,
CONSTRAINT PK_EventfulEvents PRIMARY KEY CLUSTERED (EventfulId)
);
GO
但是,此外键约束引起了问题:
REFERENCES [dbo].[Events](ImportId)
执行脚本时出现错误:
在引用表'dbo.Events'中没有与外键'FK__Events__Eventful__5B78929E'中的引用列列表匹配的主键或候选键。
如何仅引用该表上的ImportId
?我需要在ImportTypeId
表中放置[eventful].[Events]
才能正常工作吗?
答案 0 :(得分:3)
FK必须引用PK或唯一索引。在您的示例中,ImportId
不是唯一的
CONSTRAINT UQ_Events UNIQUE (ImportId, ImportTypeId) != UNIQUE(ImportId)
您可以:
在单列ImportId
使用基于两列的复合FK关系