CREATE TABLE [dbo].[ProjectTasks]
(
[TaskID] [int] IDENTITY(1,1) NOT NULL,
...
[DefaultTaskValue] [int] NULL
)
ALTER TABLE [dbo].[ProjectTasks] ADD CONSTRAINT [PK_ProjectTasks] PRIMARY KEY
CLUSTERED
(
[TaskID] ASC
)
ALTER TABLE [dbo].[ProjectTasks] ADD CONSTRAINT [FK_ProjectTasks_TaskValues]
FOREIGN KEY([TaskID], [DefaultTaskValue])
REFERENCES [dbo].[TaskValues] ([TaskID], [Value])
GO
CREATE TABLE [dbo].[TaskValues]
(
[TaskID] [int] NOT NULL,
[Value] [int] NOT NULL,
...
)
ALTER TABLE [dbo].[TaskValues] ADD CONSTRAINT [PK_TaskValues] PRIMARY KEY CLUSTERED
(
[TaskID] ASC,
[Value] ASC
)
ALTER TABLE [dbo].[TaskValues] ADD CONSTRAINT [FK_TaskValues_ProjectTasks]
FOREIGN KEY([TaskID])
REFERENCES [dbo].[ProjectTasks] ([TaskID])
GO
鉴于上述情况,任何一个表中的记录都不能被删除 - 有什么巧妙的解决方案吗?我想做的是对设计进行排序,使链接表成为一个纯粹的链接表,而不是让它本身携带价值。到目前为止,这还不是问题,因为从不需要实际删除行(它们被标记,但没有实际删除),当然您可以插入,因为 DefaultValue 可以为 NULL。
编辑:作为对我的降级的回应,我应该提到,我已经考虑过 ON DELETE CASCADE 和 TRIGGER,我正在寻找这些场景的替代方案,显然 ON DELETE SET NULL 将不起作用。