DBProj.dbschema(0,0): предупреждение SQL01271: безымянный внешний ключ между таблицами X и Y будет проверен путем проверки таблицы
Я получил эту ошибку при развертывании Visual Studio SQL Server DBProject
DBProj.dbschema (0,0): Предупреждение SQL01271: безымянный внешний ключ между таблицами [dbo].[Match] и [dbo].[Team] будет проверен путем проверки таблицы. Назовите внешний ключ, чтобы не проверять всю таблицу, а проверять только новое ограничение.
Мое определение таблицы
CREATE TABLE [dbo].[Match]
(
MatchID int identity(11,2) PRIMARY KEY,
TournamentID int not null REFERENCES Tournament(TournamentID),
Team1_ID int not null REFERENCES Team(TeamID),
Team2_ID int not null REFERENCES Team(TeamID),
MatchDate date,
MatchTime time
)
CREATE TABLE [dbo].[Team]
(
TeamID int PRIMARY KEY,
TeamName varchar(50)
)
ОБНОВЛЕНИЕ: Безымянные ограничения
Если вы не укажете имя, SQL сгенерирует случайное имя, построенное из префикса, обозначающего тип ограничения, и частичных имен таблиц и столбцов, за которыми следует произвольная буквенно-цифровая строка. Обычно это выглядит примерно так: DF_MyTable_MyColu__3F3159AB
Каждый раз, когда DBProject перестраивается и разворачивается, этот процесс повторяется, генерируя новый набор случайных имен ограничений
Что означает эта ошибка? В чем смысл? В частности, назовите внешний ключ, чтобы не проверять всю таблицу, а проверять только новое ограничение.
1 ответ
Резюме: рекомендуется всегда называть ограничения
Информацию по этому вопросу, для меня, трудно найти. До сих пор мне удалось найти некоторую новую информацию об ограничениях, и я могу сказать, что узнал больше.
Отправив этот же вопрос на dba.SE.com, я получил ответ
Как удалить безымянное ограничение в SQL Server
Если вы не укажете имя, SQL сгенерирует случайное имя, построенное из префикса, обозначающего тип ограничения, и частичных имен таблиц и столбцов, за которыми следует произвольная буквенно-цифровая строка. Обычно это будет выглядеть примерно так:
DF__MyTable__MyColu__3F3159AB
,
Очистка сценариев развертывания SQL Server в объектах DRI с помощью раздела "Нежелательные" имена
Например, если первичный ключ создан, но не назван, SQL Server использует автоматически сгенерированное имя по умолчанию PK__TableName__Junk (например, PK__Customer__A4AE64082CE326F2). Это приведет к тому, что SQL Compare отбросит первичный ключ и создаст его заново, поскольку часть его имени в разных базах будет отличаться.
Это означает, что, несмотря на отсутствие функциональных изменений, любые сценарии изменений, созданные с помощью программного обеспечения сравнения, будут при каждой новой сборке пытаться удалить "старое" ограничение и добавить "новое". Удаление и воссоздание первичного ключа на столе может быть очень дорогостоящей операцией, и поскольку функциональных изменений не произошло, без которых мы вполне можем жить.
,
Блог Дэна Джонса: Лучшая практика: ограничения имен
Суть в том, чтобы не быть ленивым администратором баз данных / программистом и позволить системе назвать ваши ограничения. Несколько лишних нажатий на клавиатуру в конечном итоге того стоят.
Фактически, это может стать частью моего стандартного арсенала вопросов для интервью с DBA: вы называете свои ограничения? Или что-то типа того.