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は明らかに機能しません.