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

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

14.08.2008 13:53:33
17 ОТВЕТОВ
РЕШЕНИЕ

Псевдонимы таблиц являются неизбежным злом при работе с сильно нормализованными схемами. Например, и я не являюсь архитектором этой БД, так что терпите меня, может потребоваться 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

... и т.д

29
14.08.2008 14:00:37
«Необходимое зло» кажется немного сильным. В худшем случае это не нужно, а в лучшем случае их необходимо использовать. Однако в большинстве случаев использование псевдонимов повышает читабельность кода.
ScottCher 14.10.2008 17:52:31
Чем этот пример лучше, чем использование буквальных имен таблиц? т.е. выберите tblPerson.FirstName вместо select person.FirstName и т. д.
Chris Schiffhauer 1.11.2016 19:18:11
SELECT p.FirstName гораздо менее загроможден, чем SELECT tblPerson.FirstName. Забудьте о a, b, c как псевдонимах - они добавляют к путанице, а не уменьшают ее. Но использование р для лица, O для заказа и т.д. делает код гораздо более удобным для чтения в большом запросе.
Reversed Engineer 26.04.2017 10:45:55

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

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

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

30
14.08.2008 13:55:54
Коррелированный подзапрос - еще один пример, где вам нужен псевдоним.
Royi Namir 26.05.2014 06:11:42
переменная таблицы также требует псевдоним для ссылки на имена столбцов
montelof 17.06.2015 15:46:53

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

1
26.07.2013 16:00:47

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

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

1
14.08.2008 13:57:33

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

3
14.08.2008 13:57:54

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

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

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

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

8
14.08.2008 14:00:26
Как оптимизатор запросов выигрывает от использования псевдонимов?
Tao 20.10.2011 21:59:35
@Tao - в моем примере выше я использую a.Text, но Textтоже работал бы (если только Answerвызывается поле Text). Вы экономите планировщик запросов от необходимости рисунка видно , что путем использования либо Answer.Textили a.Text. Неважно, используете ли вы имя таблицы или псевдоним, но определение поля помогает.
Keith 23.10.2011 21:43:21
То, что вы говорите, звучит разумно с человеческой точки зрения, но я никогда не слышал ничего подобного об оптимизаторе запросов SQL Server. Когда вы говорите: «Определение поля помогает», это только ваш инстинкт, или у вас есть какие-либо данные или ссылки, которые это подсказывают? Я не пытаюсь создавать проблемы здесь, просто очень заинтересован, если это правда! (это очень плохо отразится на оптимизаторе, если это так ...)
Tao 24.10.2011 10:44:01
@Tao - я не рассматривал это недавно, но в SQL2000 не полностью квалифицированные имена полей привели бы к тому, что специальные планы запросов были бы отброшены. Также a.Textпросто просматривает поля и статистику в одной таблице, при этом Textнеобходимо проверить все таблицы в запросе (имейте в виду, что это могут быть тысячи полей в сотнях объединений). Я не сравнивал их напрямую с точки зрения времени компиляции запроса, но было бы интересно сделать это.
Keith 24.10.2011 14:41:40
Есть ли у вас документация, показывающая, что SQL2000 откажется от специальных планов запросов из-за неполных имен полей? Это кажется действительно странным, поскольку подразумевает, что канонизация столбцов не является качеством синтаксического анализатора, а как-то зависит от оптимизатора.
Robert Fischer 14.05.2012 19:59:04

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

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

5
14.08.2008 14:02:40

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

Выберите Person.Name из
dbo.Person As Person

0
14.08.2008 14:33:56

Псевдонимы необходимы при объединении таблиц со столбцами с одинаковыми именами.

-1
1.11.2016 19:19:57
Это неверно Вы можете использовать фактическое имя таблицы, а не псевдоним.
Chris Schiffhauer 1.11.2016 19:20:26

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

Это экономит на наборе текста и все еще несет в себе некоторый смысл.

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

0
18.08.2008 09:47:16

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

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

5
18.08.2008 10:00:42

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

1
18.08.2008 20:07:51

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

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

2
25.08.2008 18:40:45

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

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

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

0
14.10.2008 17:57:24
Согласитесь, но псевдоним не в этом, это квалификация имени таблицы. Так что без псевдонима это можно было бы написать: SELECT table_a.Description
WW. 29.10.2008 06:59:11
Договорились, что есть разница между псевдонимами таблиц и определением столбца ... но они идут рука об руку. Было бы глупо псевдоним таблицы и все еще использовать имя таблицы в списке выбора. одинаково глупо использовать имя таблицы и тошноту в списке выбора, когда SQL допускает значимые псевдонимы
Mark Brady 30.10.2008 19:20:05

Хороший

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

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

9
5.11.2008 17:45:50

Я единственный человек здесь, кто действительно ненавидит их?

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

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 не соответствуют этому соглашению, которое заставляет меня стиснуть зубы. Таким образом, мне нужно искать во всем коде один псевдоним, чтобы выяснить, где он находится (и что разочаровывает, я должен прочитать логику, прежде чем найду объявление псевдонима). Если бы не это, мне, честно говоря, система могла бы понравиться больше.

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

18
7.11.2012 20:12:31
Это, безусловно, плохое использование псевдонимов. В идеале псевдонимы, по крайней мере, намекают на таблицу, из которой они получены. В простых случаях подойдут отдельные символы, но в некоторых случаях я считаю, что действительно полезно определить тип данных, которые я получаю. Например, если я присоединяюсь к tblAddress для почтовых и почтовых адресов, я могу присвоить ему псевдоним mailAdd и shipAdd, чтобы было совершенно ясно, что псевдоним - это не только адрес, но и какой именно тип адреса. использование псевдонимов, таких как a, b, c, - просто плохая практика, и я думаю, что даже большинство, кому нравится использовать псевдонимы, согласятся, что это c.crap
CStroliaDavis 3.11.2011 17:52:00
Псевдонимы таблиц необходимы в SQL для именования таблиц подвыбора и объединения таблиц с общими именами столбцов. Определение псевдонима является простым. Проблема в том, что предложение SELECT принадлежит не в начале, а после FROM-WHERE-GROUP-HAVING и перед ORDER BY.
philipxy 30.06.2017 05:19:53

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

4
8.11.2012 18:20:11