Псевдонимы таблиц SQL - хорошие или Плохие?[закрыто]

StackOverflow https://stackoverflow.com/questions/11043

  •  08-06-2019
  •  | 
  •  

Вопрос

Каковы плюсы и минусы использования псевдонимов таблиц в SQL?Я лично стараюсь избегать их, поскольку считаю, что они делают код менее читабельным (особенно при чтении больших операторов where / and), но мне было бы интересно услышать какие-либо контраргументы этому.Когда обычно рекомендуется использовать псевдонимы таблиц, и есть ли у вас какие-либо предпочтительные форматы?

Это было полезно?

Решение

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

Вместо несколько стандартных односимвольных псевдонимов я предпочитаю псевдонимы коротких слов, поэтому SQL в приведенном выше примере в конечном итоге выглядит следующим образом:

select person.FirstName
      ,person.LastName
      ,addr.StreetAddress
      ,addr.City
      ,addr.State
      ,addr.Zip
      ,phone.PhoneNumber
      ,company.CompanyName
from tblPeople person
left outer join tblAffiliations affl on affl.personID = person.personID
left outer join tblCompany company on company.companyID = affl.companyID

...и т.д.

Другие советы

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

Это также зависит от того, есть ли у вас уникальные имена столбцов в таблицах.В нашей устаревшей базе данных у нас есть трехбуквенные префиксы для всех столбцов, происходящие от сокращенной формы таблицы, просто потому, что одна древняя система баз данных, с которой мы когда-то были совместимы, не очень хорошо поддерживала псевдонимы таблиц.

Если у вас есть имена столбцов, которые встречаются более чем в одной таблице, указание имени таблицы как части ссылки на столбец является обязательным, и, таким образом, псевдоним таблицы позволит сократить синтаксис.

Неужели я здесь единственный человек, который действительно их ненавидит?

Как правило, я не пользуюсь ими без крайней необходимости.Я просто очень ненавижу читать что-то вроде

select a.id, a.region, a.firstname, a.blah, b.yadda, b.huminahumina, c.crap
from table toys as a
inner join prices as b on a.blah = b.yadda
inner join customers as c on c.crap = something else
etc

Когда я читаю SQL, мне нравится точно знать, что я выбираю, когда я это читаю;псевдонимы на самом деле смущают меня больше, потому что мне приходится перебирать строки столбцов, прежде чем я действительно доберусь до имени таблицы, которое обычно представляет информацию о данных, которых нет в псевдониме.Возможно, это нормально, если вы создали псевдонимы, но я обычно читаю вопросы по StackOverflow с кодом, который, кажется, использует псевдонимы без уважительной причины.(Кроме того, иногда кто-то создает псевдоним в операторе и просто не использует его.Почему?)

Я думаю, что псевдонимы таблиц используются так часто, потому что многие люди не любят печатать.Хотя я не думаю, что это хорошее оправдание.Это оправдание является причиной того, что в итоге мы получаем ужасные имена переменных, ужасные сокращения функций, плохой код...Я бы потратил время, чтобы ввести полное имя.Однако я быстро набираю текст, так что, возможно, это как-то связано с этим.(Возможно, в будущем, когда у меня будет кистевой туннель, я пересмотрю свое мнение об псевдонимах.: P ) Я особенно ненавижу натыкаться на псевдонимы таблиц в PHP-коде, где, я считаю, нет абсолютно никакой причины делать это - вам нужно ввести это только один раз!

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

Редактировать: (Более года спустя) Я имею дело с некоторыми хранимыми процедурами, которые используют псевдонимы (я их не писал, и я новичок в этом проекте), и они довольно болезненны.Я понимаю, что причина, по которой мне не нравятся псевдонимы, заключается в том, как они определяются.Вы знаете, что обычно рекомендуется объявлять переменные в верхней части вашей области видимости?(И обычно в начале строки?) Псевдонимы в SQL не соответствуют этому соглашению, что заставляет меня скрипеть зубами.Таким образом, мне приходится искать по всему коду один псевдоним, чтобы узнать, где он находится (и что разочаровывает, мне приходится читать логику, прежде чем я найду объявление псевдонима).Если бы не это, мне, честно говоря, эта система понравилась бы больше.

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

Оптимизатор запросов Microsoft SQL выигрывает от использования либо полных имен, либо псевдонимов.

Лично я предпочитаю псевдонимы, и если у меня не много таблиц, они, как правило, однобуквенные.

--seems pretty readable to me ;-)
select a.Text
from Question q
    inner join Answer a
        on a.QuestionId = q.QuestionId

Существует также практическое ограничение на то, как долго может выполняться строка Sql - псевдонимы позволяют избежать этого ограничения.

Хорошо

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

И если вы создаете или читаете код приложения, которое использует сохраненные извне или динамически генерируемые имена таблиц, то без псевдонимов действительно трудно с первого взгляда определить, что означают все эти "%s" или другие заполнители.Это не крайний случай, например, многие веб-приложения позволяют настраивать префикс имени таблицы во время установки.

Если я пишу запрос сам (набирая текст в редакторе, а не используя конструктор) Я всегда использую псевдонимы для имени таблицы, поэтому мне нужно ввести полное имя таблицы только один раз.

Я действительно ненавижу читать запросы, сгенерированные дизайнером с полным именем таблицы в качестве префикса к имени каждого столбца.

Я полагаю, единственное, что действительно говорит против них, - это чрезмерная абстракция.Если у вас будет хорошее представление о том, к чему относится псевдоним (хорошее именование помогает;"a", "b", "c" могут быть довольно проблематичными, особенно когда вы читаете заявление месяцы или годы спустя), я не вижу ничего плохого в сглаживании.

Как уже говорили другие, присоединяется требовать их можно использовать, если вы используете одну и ту же таблицу (или представление) несколько раз, но даже вне этой ситуации псевдоним может служить для уточнения назначения источника данных в определенном контексте.От имени псевдонима попытайтесь ответить почему вы получаете доступ к определенным данным, а не что данные есть.

Я ЛЮБЛЮ псевдонимы!!!!Я провел несколько тестов, используя их противнет, и мы увидели некоторый прирост в обработке.Я предполагаю, что выигрыш в обработке будет выше, когда вы будете иметь дело с большими наборами данных и сложными вложенными запросами, чем без них.Если я смогу это протестировать, я дам вам знать.

Они вам понадобятся, если вы собираетесь присоединить таблицу к самой себе или если вы снова используете столбец в подзапросе...

Псевдонимы - это здорово, если учесть, что в моей организации есть имена таблиц, такие как:Имя схемы.DataPointName_SubPoint_Sub-подпоинт-подзаголовок...Моя команда использует довольно стандартный набор сокращений, так что догадки сведены к минимуму.Скажем, ProgramInformationDataPoint будет сокращен до pidp, а submitions - просто до sub.

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

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

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

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

ИМХО, это действительно не имеет значения с короткими именами таблиц, которые имеют смысл, я иногда работал с базами данных, где имя таблицы могло быть чем-то вроде VWRECOFLY или какой-то другой случайной строкой (продиктованной политикой компании), которая действительно представляет пользователей, поэтому в этом случае я нахожу, что псевдонимы действительно помогают сделать код НАМНОГО более читаемым.(users.username имеет намного больше смысла, чем VWRECOFLY.username)

Я всегда использую псевдонимы, поскольку для получения надлежащей производительности в MSSQL вам всегда нужно указывать префикс schema.Так что вы увидите много интересного.

Выберите Лицо.Имя От
dbo.Человек как личность

Я всегда использую псевдонимы при написании запросов.Обычно я стараюсь сокращать название таблицы до 1 или 2 репрезентативных букв.Таким образом, Users становится u, а debtor_transactions становится dt и т.д...

Это экономит на наборе текста и по-прежнему несет в себе некоторый смысл.

Более короткие названия также делают его более читабельным для меня.

Если вы не используете псевдоним, это ошибка в вашем коде, которая только и ждет своего часа.

SELECT Description -- actually in a
 FROM
 table_a a,
 table_b b
 WHERE
 a.ID = b.ID

Что происходит, когда вы делаете такую мелочь, как добавление столбца с именем Description в Table_B.Правильно, вы получите сообщение об ошибке.При добавлении столбца не нужно ничего нарушать.Я никогда не рассматриваю написание хорошего кода, кода без ошибок, как необходимое зло.

Псевдонимы требуются при объединении таблиц со столбцами, имеющими идентичные имена.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top