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 не будет работать.