У меня есть следующий DDL, который я использую с SQL Server 2012:
CREATE TABLE Subject (
[SubjectId] INT IDENTITY (1, 1) NOT NULL,
[Name] NVARCHAR (50) Not NULL,
CONSTRAINT [PK_Subject] PRIMARY KEY CLUSTERED ([SubjectId] ASC)
)
CREATE TABLE Topic (
[TopicId] INT IDENTITY (1, 1) NOT NULL,
[Name] NVARCHAR (50) NOT NULL,
[SubjectId] INT NOT NULL,
CONSTRAINT [PK_Topic] PRIMARY KEY CLUSTERED ([TopicId] ASC)
)
ALTER TABLE [Topic] WITH CHECK ADD CONSTRAINT [FK_TopicSubject]
FOREIGN KEY([SubjectId]) REFERENCES [Subject] ([SubjectId])
ON DELETE NO ACTION
Что я хочу, так это для SQL Server, чтобы я не удалял родителя, если ссылка на этого родителя существует в дочернем? Например, я хочу удалить на subjectID = 3 в теме сбой, если есть дети с SubjectId 3.
Для этого я неясен и не могу найти ответ. Нужно ли добавлять "УДАЛИТЬ НЕТ ДЕЙСТВИЙ", или я просто не могу удалить эти три слова.
Я задаю этот вопрос, так как в аналогичном вопросе у меня был ответ, что я должен определить триггер для родителя. Однако я думал, что просто определение внешнего ключа остановит меня на удаление родителя, если ребенок существует.