在 SQL 服务器中,我可以在不存在的列上设置外键吗?
In SQL Server, can I set a foreign key on a column that does not exist?
我正在使用 SQL Server 2005,并且我有 3 个 tables:
CREATE TABLE [dbo].[Workflow]
(
[WorkflowId] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NOT NULL,
[Description] [varchar](1000) NULL
)
CREATE TABLE [dbo].[Application]
(
[ApplicationId] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NOT NULL
)
CREATE TABLE [dbo].[Rel_Workflow_Application]
(
[WorkflowId] [int] NOT NULL,
[ApplicationId] [int] NOT NULL
)
规则是在Rel_Workflow_Application
中,ApplicationId
必须存在于Application
中,table也可以为0。我在[中没有记录=24=] Application
其中 ApplicationId = 0
我不想创建一个。
如何设置此限制条件?
虽然在创建外键时可以使用 NOCHECK
,但这种黑客攻击可能会产生问题。我会使用 null 而不是 0,如果 0 需要出现在查询中,请在 select 语句中使用 coalesce(ApplicationID, 0)
或创建执行此操作的视图并改为查询该视图。
这清楚地表明外键在 Application
中没有一行。
我正在使用 SQL Server 2005,并且我有 3 个 tables:
CREATE TABLE [dbo].[Workflow]
(
[WorkflowId] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NOT NULL,
[Description] [varchar](1000) NULL
)
CREATE TABLE [dbo].[Application]
(
[ApplicationId] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NOT NULL
)
CREATE TABLE [dbo].[Rel_Workflow_Application]
(
[WorkflowId] [int] NOT NULL,
[ApplicationId] [int] NOT NULL
)
规则是在Rel_Workflow_Application
中,ApplicationId
必须存在于Application
中,table也可以为0。我在[中没有记录=24=] Application
其中 ApplicationId = 0
我不想创建一个。
如何设置此限制条件?
虽然在创建外键时可以使用 NOCHECK
,但这种黑客攻击可能会产生问题。我会使用 null 而不是 0,如果 0 需要出现在查询中,请在 select 语句中使用 coalesce(ApplicationID, 0)
或创建执行此操作的视图并改为查询该视图。
这清楚地表明外键在 Application
中没有一行。