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
鑑於上述情況,任何表中的記錄都不能刪除 - 是否有任何整潔的解決方案?我想要做的是對鏈接表進行排序,使鏈接表成爲純粹的鏈接表,而不是本身帶有價值。這還沒有到現在,因爲從來沒有要求行被真正刪除的問題(他們被標記,但實際上並未刪除),當然你可以插入,因爲默認值可以爲NULL。SQL Server刪除困境
編輯:爲了響應我的downmarker,我應該提到,我已經考慮了ON DELETE CASCADE和TRIGGER,我正在尋找這些場景的替代方案,並明確ON DELETE SET NULL不起作用。
一種可能性是有'ON DELETE CASCADE'添加到您的外鍵約束,但這可能會引發一連串的記錄刪除兩個表。 – 2012-02-14 11:00:28
認爲 - 並不真正可行。也被視爲ProjectTasks上的插入/更新觸發器之後(插入必須始終與DefaultValue一起進入NULL,則會檢查更新)。 – kpollock 2012-02-14 11:04:23
您應該刪除'DefaultTaskValue'列並創建另一個'DefaultTaskvalue'表。這樣,所有列都可以設置爲「NOT NULL」。 – 2012-02-14 11:15:56