Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Именование псевдонимов  [new]
TopCore
Member

Откуда: Mariupol, Ukraine
Сообщений: 871
Добрый день! Подскажите, кто как именует псевдонимы таблиц в запросах? Особенно если присутствует многоуровневая вложенность и соединения.
Спасибо.
15 сен 15, 09:15    [18149672]     Ответить | Цитировать Сообщить модератору
 Re: Именование псевдонимов  [new]
Yuri Abele
Member

Откуда: Латвия> Литва > Тольятти > Wiesbaden > Karlsruhe
Сообщений: 1661
TopCore,

что тебе точно скажу - это дело вкуса. Т.е., как говорят немцы, Königlösung тут отсутствует.
Лично я стараюсь давать такие псевдонимы, чтобы по ни было понятно, что это за таблица.

P.S. Почти всегда "многоуровневая вложенность" (если речь о подзапросах) можно преобразовать к "нормальным" JOIN-ам. Но это так, к слову.
15 сен 15, 09:28    [18149735]     Ответить | Цитировать Сообщить модератору
 Re: Именование псевдонимов  [new]
TopCore
Member

Откуда: Mariupol, Ukraine
Сообщений: 871
Yuri Abele, вот сейчас что-то вразумительное для себя придумал:
SELECT
    t1.id
   ,tlj1_1.shortname
   ,t1.dateoutput
FROM
    table_main t1
    LEFT JOIN joined_table tlj1_1 ON
        tlj1_1.id = t1.id
WHERE
    t1.id =
    (
        SELECT
            t1_1.doc_id
        FROM
            first_nested_table t1_1
        WHERE
            t1_1.some_id IN
            (
                SELECT
                    t2_1.some_id
                FROM
                    second_nested_table t2_1
                   ,second_nested_table t2_2
                WHERE
                    t2_1.field_id = t2_2.field_id_1
                    AND t2_1.field_1 = t2_2.field_1
                    AND t2_1.field_2 = t2_2.field_2
                    AND t2_1.field_id_1 IS NULL
            )
            AND t1_1.field_3 IS NULL
    );

Псевдоним для главных таблиц состоит из "t" + счётчик. Для присоединённых: "t" + "lj" + номер_таблицы_к_которой_присоединяем + "_" + счётчик. Для таблиц во вложенных запросах: "t" + уровень_вложенности_запроса + "_" + счётчик.

Думаю, такой подход уже давно существует, но я его не видел.
Правда всё это летит шкереберть при правке такого составного запроса.
Какая у кого ещё практика именования псевдонимов?
15 сен 15, 10:05    [18149910]     Ответить | Цитировать Сообщить модератору
 Re: Именование псевдонимов  [new]
o-o
Guest
TopCore,
у вас что, 2000-ый сервер?
я подобные творения переписываю через CTE,
даже начальница проканалась, тоже попеределывала свои многоэтажности,
т.к. вложенность -- это форменное издевательство.
и вот уже самим CTE надо осмысленные имена давать и комментарии для потомков оставлять
15 сен 15, 10:11    [18149949]     Ответить | Цитировать Сообщить модератору
 Re: Именование псевдонимов  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
TopCore,

какой ужас! :-(((
15 сен 15, 10:11    [18149957]     Ответить | Цитировать Сообщить модератору
 Re: Именование псевдонимов  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
o-o
TopCore,
у вас что, 2000-ый сервер?
я подобные творения переписываю через CTE,
даже начальница проканалась, тоже попеределывала свои многоэтажности,
т.к. вложенность -- это форменное издевательство.
и вот уже самим CTE надо осмысленные имена давать и комментарии для потомков оставлять
Зачем CTE, если там нужны простые JOINы.
15 сен 15, 10:12    [18149968]     Ответить | Цитировать Сообщить модератору
 Re: Именование псевдонимов  [new]
o-o
Guest
iap,

если нужны джойны, пусть будут джойны.
я помойки выше двух этажей вообще не читаю.
особенно на форуме.
когда деньги за вредность доплачивают, можно и пострадать, а так -- "нет уж фиг уж"
15 сен 15, 10:16    [18149998]     Ответить | Цитировать Сообщить модератору
 Re: Именование псевдонимов  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
o-o
помойки выше двух этажей


плюсанул
15 сен 15, 10:21    [18150023]     Ответить | Цитировать Сообщить модератору
 Re: Именование псевдонимов  [new]
TopCore
Member

Откуда: Mariupol, Ukraine
Сообщений: 871
churupaha, o-o, что не так в многоуровневом запросе? Вы вместо таких запросов делаете лефт джойны?
Под CTE имелось в виду предложение WITH?
15 сен 15, 10:24    [18150054]     Ответить | Цитировать Сообщить модератору
 Re: Именование псевдонимов  [new]
churupaha
Member

Откуда: Краснодар
Сообщений: 1015
TopCore
имелось в виду предложение WITH?


угу, с комментариями к каждому шагу. всяко глазам/мозгу проще.
15 сен 15, 10:28    [18150087]     Ответить | Цитировать Сообщить модератору
 Re: Именование псевдонимов  [new]
Jaffar
Member

Откуда:
Сообщений: 633
TopCore,

КМК нужно давать не слишком длинные псевдонимы отражающие смысл и стараться не менять их от запроса к запросу.

Например:
tcln_Main - клиенты - cl, или напр. cl_d / cl_c - если определяем клиента по Дт и по Кт.
tla_Account - счета a / acc , ну и соотв. ac / ad по Дт и по Кт
и т.д.

т.е есть определенная постоянная часть и м.б. переменная часть в зависимости от контекста.

Не рекомендую псевдонимить типа t1 t2 t3 и т.д., а так же a b c d e ... - т.к. псевдоним призван повысить информативность кода для программиста, а не просто присутствовать.

особенно плохо когда без них, и потом сиди ищи от какой таблицы этот столбец.

+ не рекомендую делать из кода сильно длинную портянку на 5 страниц
Лучше написать что-то в 1 строчку чем высокую портянку. например тот же exists

+ высокая вложенность запросов сильно усложняет дело при чтении чужого или своего давнишнего говно_кода.

+ используйте join и особенно рекомендую пристраститься к cross/outer apply - он действительно творит чудеса, нужно только попробовать.

Особенно он полезен при последовательной обработке типа сначала есть строка, потом нужно посчитать ее длинну, потом нужно найти позицию такого-то символа, потом такого-то от предыдущего, потом какие-нить условия исходя из этого.
В таких задачах альтернативу apply - просто нет. тут или писать 100500 уровневый подзапрос или огромные повторяющиеся портянки которые хрен прочтешь потом.
а так несколько последовательных cross apply - Решают проблему на ура.
15 сен 15, 10:49    [18150202]     Ответить | Цитировать Сообщить модератору
 Re: Именование псевдонимов  [new]
TopCore
Member

Откуда: Mariupol, Ukraine
Сообщений: 871
Jaffar, спасибо за развёрнутый ответ. Почитал про CROSS APPLY раз и два. Крутая вещь, в которой можно использовать также подзапросы (исходя из второй статьи, за что, предполагаю, меня могут закидать помидорами) :)
15 сен 15, 11:28    [18150338]     Ответить | Цитировать Сообщить модератору
 Re: Именование псевдонимов  [new]
Megabyte
Member

Откуда: ближайшее заМКАДье
Сообщений: 4997
Jaffar
+ используйте join и особенно рекомендую пристраститься к cross/outer apply - он действительно творит чудеса, нужно только попробовать.

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

Надо заметить, что многие не сильно опытные кодеры, открыв эту конструкцию, начинают лепить ее везде, хотя кое-где для оптимизации производительности лучше использовать вложенный подзапрос с JOIN, т.к. JOIN выполняется 1 раз, а cross/outer apply на каждую строку из верхнего подзапроса.
15 сен 15, 17:26    [18152467]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить