Являются ли точки в именах объектов плохой практикой?

#tsql #objectname

#tsql #имяобъекта

Вопрос:

Например, может быть названо ограничение для значения по умолчанию 0 DF__tablename.columnname .

Хотя мой поиск на предмет того, что это плохая практика, не дает результатов, в многочисленных примерах ограничений, которые я видел на SO и многих других сайтах, я никогда не замечал точки.

Ответ №1:

Использование точки в имени объекта является плохой практикой.

Не используйте символ точки в идентификаторе. Да, это можно сделать, но недостатки перевешивают любые преимущества.


tl; dr

Специальные символы, такие как точка, не допускаются в обычных идентификаторах. Если идентификатор не соответствует правилам для обычного идентификатора, то ссылки на идентификатор должны быть заключены в квадратные скобки (или двойные кавычки ANSI).

https://learn.microsoft.com/en-us/sql/relational-databases/databases/database-identifiers?view=sql-server-2017

Что касается точки (символа точки), то ее использование в идентификаторе недопустимо в обычном идентификаторе; но ее можно использовать в квадратных скобках.

Символ точки является еще более специальным символом в SQL; он используется для отделения идентификатора от предыдущего квалификатора.

   SELECT mytable.mycolumn FROM mytable
  

Мы могли бы также записать это как

   SELECT [mytable].[mycolumn] FROM mytable
  

Мы могли бы также написать

   SELECT [mytable.mycolumn] FROM mytable
  

но это означает нечто совсем другое. При этом мы ссылаемся не на столбец с именем mycolumn , а на идентификатор, содержащий символ точки.

SQL Server прекрасно справится с этим.

Но если мы сделаем это и начнем использовать символ точки в наших идентификаторах, мы вызовем путаницу и разочарование у будущих читателей. Любая выгода, которую мы получили бы от использования символов точки в идентификаторах, будет намного перевешиваться недостатками для других.

Аналогично, почему мы не создаем таблицы с именами WHERE (1=1) OR или столбцы с именами SUBSTR(foo.bar,1,10) , чтобы избежать таких чудовищ, как

   SELECT [SUBSTR(foo.bar,1,10)] FROM [WHERE (1=1)] OR]
  

Который может быть допустимым SQL, но это очень расстроит будущих читателей и заставит их проклинать нас, наших потомков и близких. Не заставляйте их делать это. Из любви ко всему, что есть хорошего и красивого в этом мире, не используйте символы точки в идентификаторах.

Ответ №2:

Совершенно допустимо иметь точки в именах объектов. Однако для этого требуется заключать имя объекта в квадратные скобки при обращении к нему. В случае, если вы забудете эти квадратные скобки, вы получите несколько сообщений об ошибках, которые могут быть менее понятны неопытному разработчику. По этой причине я рекомендую не использовать точки в именах объектов. Я бы также предположил, что это основная причина, по которой вы не часто видите примеры точек в названиях объектов в Интернете.

В вашем примере вы могли бы использовать другое подчеркивание вместо точки, вот так: DF__tablename_columnname