Странные ограничения в сгенерированном SQL
Примечание. Этот вопрос не относится к визуальной парадигме. Любой, кто знает SQL, может ответить на него.
Я использую Visual Paradigm для моделирования базы данных в нашем проекте (используя диаграммы ER). Когда Visual Paradigm генерирует эквивалент SQL для базы данных, и я импортирую его в MSSQL, это работает довольно красиво.
Я взглянул на сгенерированный код SQL, чтобы убедиться, что все правильно, и увидел что-то странное!:
За tblContracts
Я определил ограничение с именем EndAfterStart
чтобы убедиться, что значение endDate
всегда больше чем startDate
, Сгенерированный код SQL для этого ограничения находится здесь:
IF NOT EXISTS (SELECT * FROM sys.check_constraints WHERE object_id=OBJECT_ID(N'[dbo].[EndAfterStart]'))
ALTER TABLE [dbo].[tblContracts] WITH CHECK ADD CONSTRAINT [EndAfterStart] CHECK (([startDate]<=[endDate]))
GO
ALTER TABLE [dbo].[tblContracts] CHECK CONSTRAINT [EndAfterStart]
GO
И вопросы:
- Зачем
tblContracts
изменяется дважды, чтобы добавить это ограничение?! - Разве первых двух строк недостаточно?
- Чем отличается вторая строка от четвертой?
2 ответа
Первая и вторая строки создают EndAfterStart
ограничение, если оно не существует. Четвертая строка позволяет EndAfterStart
ограничение.
Вторая строка добавляет ограничение к таблице; четвертая строка включает ограничение.