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: вы называете свои ограничения? Или что-то типа того.

Другие вопросы по тегам