Скажите, у меня есть следующие таблицы:
CREATE TABLE [Weeks]
(
[Id] INT NOT NULL IDENTITY,
CONSTRAINT [PK_Weeks] PRIMARY KEY ([Id])
);
CREATE TABLE [Days]
(
[Id] INT NOT NULL IDENTITY,
[WeekId] INT NULL,
CONSTRAINT [PK_Days] PRIMARY KEY ([Id]),
CONSTRAINT [FK_Days_Weeks_WeekId]
FOREIGN KEY ([WeekId]) REFERENCES [Weeks] ([Id])
);
CREATE TABLE [ReplacedDayInWeek]
(
[Id] INT NOT NULL IDENTITY,
[WeekId] INT NOT NULL,
[DayId] INT NOT NULL,
[ReplacedDayId] INT NOT NULL,
CONSTRAINT [PK_ReplacedDayInWeek] PRIMARY KEY ([Id]),
CONSTRAINT [FK_ReplacedDayInWeek_Days_DayId]
FOREIGN KEY ([DayId]) REFERENCES [Days] ([Id]),
CONSTRAINT [FK_ReplacedDayInWeek_Weeks_WeekId]
FOREIGN KEY ([WeekId]) REFERENCES [Weeks] ([Id]),
CONSTRAINT [FK_ReplacedDayInWeek_Weeks_ReplacedWeekId]
FOREIGN KEY ([ReplacedWeekId]) REFERENCES [Weeks] ([Id])
);
Таблица ReplacedDayInWeek содержит день определенной недели, который заменяется другим днем.
Как я могу создать ограничение SQL (или, возможно, другое решение на основе SQL), которое гарантирует, что я могу вставлять только строки в DayInWeek
с DayId
, который является частью той же недели, что и WeekId
?
Я ищу решение с наименьшим количеством изменений в исходной базе данных. Я бы предпочел дополнительную таблицу или изменения таблицы над хранимыми процедурами.