Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Этикет хранимых процедур  [new]
Владимир Машков
Member

Откуда: Санкт-Петербург
Сообщений: 25
Здравствуйте.
Возник вопрос о выработке этикета для написания хранимых процедур на T-SQL.
Подскажите, кто-нибудь занимался этим вопросом?
27 янв 11, 10:12    [10138353]     Ответить | Цитировать Сообщить модератору
 Re: Этикет хранимых процедур  [new]
Aleksey-K
Member

Откуда: Москва
Сообщений: 3116
Владимир Машков
Здравствуйте.
Возник вопрос о выработке этикета для написания хранимых процедур на T-SQL.
Подскажите, кто-нибудь занимался этим вопросом?

Этикет это соглашение об именах или что-то иное?
С уважением, Алексей
27 янв 11, 10:14    [10138364]     Ответить | Цитировать Сообщить модератору
 Re: Этикет хранимых процедур  [new]
Владимир Машков
Member

Откуда: Санкт-Петербург
Сообщений: 25
Ну конечно.
1) какие префиксы, аффиксы и суффиксы использовать.
2) на что ориентироваться, когда даем название.
3) как записывать переменные (верхний, нижний регистр)
4) название для этих переменных (int, char varchar, nvarchar ...)
... и так далее.
27 янв 11, 10:17    [10138382]     Ответить | Цитировать Сообщить модератору
 Re: Этикет хранимых процедур  [new]
Serg_77m
Member

Откуда: Донецк
Сообщений: 237
Владимир Машков,

про общепринятые правила не слышал, могу только рассказать какие правила сложились в рамках системы, которую мы разрабатываем (это ERP). Придумал её не я, она мне досталась по наследству.
Наша ERP состоит из нескольких функциональных частей, для каждой был придуман трёхбуквенный префикс, который входит в имена объектов (таблиц, представлений, функций, процедур), относящихся к этой части. Примеры префиксов - ktn (трудовые нормативы), kuz (учёт затрат), kuf (учёт финансов), pdo (производство), и т.п. К этому префиксу добавляем ещё 3-5 букв типа аббревиатуры, которые говорят о назначении объекта. Символы подчёркивания используем редко. Регистр букв нижний. Таким образом именуем таблицы. Примеры имён таблиц: ktnmd (справочник деталей), ktntn (трудоёмкость деталей), kuforg (справочник организаций), pdoskl (движение деталей по складу в производстве). В общем, имена стараемся максимально сократить.
Для представлений, функций, процедур добавляем префикс соответственно v, fn, sp. Без разделителя. При этом содержательную часть имени пишем в верхнем регистре, получается что-то вроде fnKTNSM(...)
Имена полей в таблицах составляем аналогично, но без функционального префикса. Получается 3-4 символа (реже 5), регистр верхний. Никаких префиксов-суффиксов, говорящих о типе (char, int, datetime) не используем, только для полей, являющихся вторичными ключами, добавляем суффикс pk (в нижнем регистре). Примеры: NMT (наименование материала), NRD (норма расхода материала на деталь), NSKLpk (склад - ссылка на справочник складов). Стараемся делать так, чтобы имя поля однозначно говорило о его назначении, не делаем так, чтобы в двух таблицах было поле с одинаковым именем и совершенно разным назначением. NSKLpk - это везде обозначает склад, WMTpk - везде шифр материала, PRIM - примечание.
Для процедур, которые выдают данные для отчётов используем функциональный префикс + порядковый номер отчёта (примеры: spKTN01, spKTN02, spKUF04).
А вообще не знаю как удобнее. Наверное, кому как.
27 янв 11, 11:30    [10139053]     Ответить | Цитировать Сообщить модератору
 Re: Этикет хранимых процедур  [new]
Xordal
Member

Откуда: Таганрог
Сообщений: 536
Владимир Машков,

Имена таблиц у вас просто потрясающие, честное слово. Определить их назначения смогут разве что разработчики самой системы :)
27 янв 11, 11:34    [10139098]     Ответить | Цитировать Сообщить модератору
 Re: Этикет хранимых процедур  [new]
Гуест типа
Guest
Serg_77m
...получается что-то вроде fnKTNSM(...)

жесть. не завидую тем, кому придется с этим разбираться.
27 янв 11, 11:50    [10139253]     Ответить | Цитировать Сообщить модератору
 Re: Этикет хранимых процедур  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5115
Гуест типа
Serg_77m
...получается что-то вроде fnKTNSM(...)

жесть. не завидую тем, кому придется с этим разбираться.

нука нука... раскажите чем же это так "жесть"? :)
27 янв 11, 11:54    [10139290]     Ответить | Цитировать Сообщить модератору
 Re: Этикет хранимых процедур  [new]
Xordal
Member

Откуда: Таганрог
Сообщений: 536
Дедушка
нука нука... раскажите чем же это так "жесть"? :)

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

Владимир Машков,
Практически во всех книгах, обучающих основам SQL/T-SQL есть раздел, в котором описываются интересующие вас вопросы. Но если вы придете работать в фирму, то скорей всего там будет свой собственный стиль написания и именования.
27 янв 11, 12:03    [10139363]     Ответить | Цитировать Сообщить модератору
 Re: Этикет хранимых процедур  [new]
Glory
Member

Откуда:
Сообщений: 104751
Xordal
Дедушка
нука нука... раскажите чем же это так "жесть"? :)

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

Разве надо глядеть на имя функции, а не в словарь ?
Есть системы, где все объекты "номерные" - Т0001, Т0002, V0001, ....
Но все они и их элементы имеют описание в качестве аттрибута
27 янв 11, 12:07    [10139389]     Ответить | Цитировать Сообщить модератору
 Re: Этикет хранимых процедур  [new]
Xordal
Member

Откуда: Таганрог
Сообщений: 536
Glory
Разве надо глядеть на имя функции, а не в словарь ?
Есть системы, где все объекты "номерные" - Т0001, Т0002, V0001, ....
Но все они и их элементы имеют описание в качестве аттрибута

Номерные то понятно. Но извините, по объектам с названиями fnKTNSM, ktnmd, ktntn я соглашусь с Гуест типа - это жесть )))
27 янв 11, 12:18    [10139532]     Ответить | Цитировать Сообщить модератору
 Re: Этикет хранимых процедур  [new]
Glory
Member

Откуда:
Сообщений: 104751
Xordal
Glory
Разве надо глядеть на имя функции, а не в словарь ?
Есть системы, где все объекты "номерные" - Т0001, Т0002, V0001, ....
Но все они и их элементы имеют описание в качестве аттрибута

Номерные то понятно. Но извините, по объектам с названиями fnKTNSM, ktnmd, ktntn я соглашусь с Гуест типа - это жесть )))

В чем жесть, если гуи показывает вместе с объектом и обязательное описание ?
27 янв 11, 12:20    [10139562]     Ответить | Цитировать Сообщить модератору
 Re: Этикет хранимых процедур  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Сходите на какой-нибудь форум по J.D.Edwards (Oracle People Soft Enterprise One или как он там сейчас называется),
и Вы поймёте, что у вас всё просто отлично, и жизнь невероятно прекрасна!
27 янв 11, 12:31    [10139691]     Ответить | Цитировать Сообщить модератору
 Re: Этикет хранимых процедур  [new]
Xordal
Member

Откуда: Таганрог
Сообщений: 536
Glory
В чем жесть, если гуи показывает вместе с объектом и обязательное описание ?

В той ERP-системе с которой я работаю, чуть больше 900 модулей и 2000 объектов базы данных. И найти нужны модуль можно по части его названия. Например, в названии всех объектов по заявкам содержится 'ORDER'. Вроде как проще, чем по букве Z (zayavka) или по описанию. Возможно я не прав :)
27 янв 11, 12:37    [10139751]     Ответить | Цитировать Сообщить модератору
 Re: Этикет хранимых процедур  [new]
Владимир Машков
Member

Откуда: Санкт-Петербург
Сообщений: 25
Опасаюсь, что дальнейшее развитие событий ни к чему продуктивному нас не приведет.
Давайте лучше, каждый, кого этот вопрос волнует, предложит свой вариант.

1) префикс для хранимой процедуры "sp_" - stored procedure
2) как давать название ... начинать с глагола или с существительного (sp_change_ip или sp_ip_change) ?
3) Использовать или нет подчеркивание в теле названия, а не только в префиксе (sp_ChangeIp или sp_IpChange)?

... жду Ваших высказываний из личного опыта
27 янв 11, 12:38    [10139757]     Ответить | Цитировать Сообщить модератору
 Re: Этикет хранимых процедур  [new]
Glory
Member

Откуда:
Сообщений: 104751
Xordal
Glory
В чем жесть, если гуи показывает вместе с объектом и обязательное описание ?

В той ERP-системе с которой я работаю, чуть больше 900 модулей и 2000 объектов базы данных. И найти нужны модуль можно по части его названия. Например, в названии всех объектов по заявкам содержится 'ORDER'. Вроде как проще, чем по букве Z (zayavka) или по описанию. Возможно я не прав :)

А какая разница где искать - в имени объекта, которое между прочим может иметь ограничение по длине, или в словаре ?
27 янв 11, 12:40    [10139770]     Ответить | Цитировать Сообщить модератору
 Re: Этикет хранимых процедур  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Glory
Xordal
пропущено...

Номерные то понятно. Но извините, по объектам с названиями fnKTNSM, ktnmd, ktntn я соглашусь с Гуест типа - это жесть )))

В чем жесть, если гуи показывает вместе с объектом и обязательное описание ?

По-моему тоже жесть! Гуи может и показывает и справочник может и есть. Но читать код от этого легче?
Каждый раз в справочник заглядывать очень накладно по времени и неудобно, так что при написании кода придется держать эти имена и что им соответствует в голове. Короче обфускаторы не зря придумали, и называние объектов в таком стиле по-моему сильно приближает код к результату после обфускации по критерию запутанности.
Имхо, названия должны быть отражающими суть, по возможности не очень длинными, но если встает выбор как назвать длинно но понятно или коротко но непонятно - лучше выбирать длинно но понятно. А сокращения допускаются только для общеизвестных аббревиатур. Кстати МС тоже рекомендует такой стиль. Счас лень искать, но есть в мсдн-е целый раздел, относящийся к разработке классов, о соглашениях именования и т.д., думаю и в T-SQL применимы многие рекомендации.
На этом сайте кстати в публикациях, в разделе "Разработчику" есть по-моему что-то такое по T-SQL, но сам не читал.
27 янв 11, 12:52    [10139883]     Ответить | Цитировать Сообщить модератору
 Re: Этикет хранимых процедур  [new]
Glory
Member

Откуда:
Сообщений: 104751
Имхо
Именование объектов есть часть общего проектирования системы(базы)
И как часть тоже служит для реализации какой то задачи
Как нет одной самой лучшей структуры, подходящей для всех задач, так нет и одной самой лучшей нотации для именования
Есть лишь методы и практики
27 янв 11, 13:00    [10139949]     Ответить | Цитировать Сообщить модератору
 Re: Этикет хранимых процедур  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Glory
Имхо
Именование объектов есть часть общего проектирования системы(базы)
И как часть тоже служит для реализации какой то задачи
Как нет одной самой лучшей структуры, подходящей для всех задач, так нет и одной самой лучшей нотации для именования
Есть лишь методы и практики

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

Правила использования прописных букв в сокращениях см. в разделе Соглашения о написании прописными буквами.

Не используйте аббревиатуры или сокращения как часть имени идентификатора.

Например, предпочтительнее использовать OnButtonClick, чем OnBtnClick.

Не используйте акронимы, которые не являются общепринятыми, но даже общепринятые акронимы следует использовать только в случае необходимости.
Вот тут подробнее
Естественно это не означает что все остальное "плохие практики" и ведет к провалу. Взять ту же галактику там все таблицы именуются KATPODR, KATORG, PLANSSCH, KATNAZNA - что кагбэ не вполне соответствует, однако же коммерчески успешная, распространенная система.
Но то, что использую я и рекомендовал бы это другим - это с разумной осторожностью следовать рекомендациям "большого брата" =)
27 янв 11, 13:14    [10140087]     Ответить | Цитировать Сообщить модератору
 Re: Этикет хранимых процедур  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5115
SomewhereSomehow
Имхо, названия должны быть отражающими суть, по возможности не очень длинными, но если встает выбор как назвать длинно но понятно или коротко но непонятно - лучше выбирать длинно но понятно.

следуя вашей логике:
- лично я вот в России и язык государственный у нас русский
- код могут смотреть не только гики-программеры но и простые смертные
значит таблицу которая хранит данные по остаткам за месяц заказного товара на складе в Урюпинске с автоматическим сторнированием по правилу 2 и использующуюся только для аналитической отчётности должен назвать так:
Таблица_Остатки_Месяц_Заказной_Товар_Склад_Урюпинск_Авто_Сторнирование_Правило_2_Только_Аналитическая_Отчётность?
и таких табличек сотни 2 (не считая других объектов).

Владимир Машков
1) префикс для хранимой процедуры "sp_" - stored procedure
2) как давать название ... начинать с глагола или с существительного (sp_change_ip или sp_ip_change) ?
3) Использовать или нет подчеркивание в теле названия, а не только в префиксе (sp_ChangeIp или sp_IpChange)?

стандарта типа ГОСТ не существует.
Придумайте своё и пользуйтесь.
27 янв 11, 13:18    [10140121]     Ответить | Цитировать Сообщить модератору
 Re: Этикет хранимых процедур  [new]
Xordal
Member

Откуда: Таганрог
Сообщений: 536
Владимир Машков
Опасаюсь, что дальнейшее развитие событий ни к чему продуктивному нас не приведет.
Давайте лучше, каждый, кого этот вопрос волнует, предложит свой вариант.

1) префикс для хранимой процедуры "sp_" - stored procedure
2) как давать название ... начинать с глагола или с существительного (sp_change_ip или sp_ip_change) ?
3) Использовать или нет подчеркивание в теле названия, а не только в префиксе (sp_ChangeIp или sp_IpChange)?

... жду Ваших высказываний из личного опыта

1) По префиксам все понятно, хотя у нас это постфикс :) (_SP, _FN, _VIEW). А в префиксе указываем модуль к которому относится процедура (BG_, CRM_, KDK_ ...).
2) Кажется удобней начинать с существительного. Допустим вы хотите изменить что-то. Вы естественно знаете что менять хотите. Проще найти объект, а потом уже выбрать действие над ним. Возьмите любой язык программирования, сначала указываете объект, потом через разделитель действие. Думаю здесь также будет удобней.
3) Тут думаю строго индивидуально. Даже в системных базах разные стили именования (sp_add_log_shipping_primary_database, dt_generateansiname).
27 янв 11, 13:21    [10140154]     Ответить | Цитировать Сообщить модератору
 Re: Этикет хранимых процедур  [new]
любитель префиксов
Guest
Владимир Машков
1) префикс для хранимой процедуры "sp_" - stored procedure

Не надо так называть. Это префикс для системных ХП. У нас, например, хранимки также имеют префиксы, конкретно "p_"
27 янв 11, 13:25    [10140197]     Ответить | Цитировать Сообщить модератору
 Re: Этикет хранимых процедур  [new]
studieren
Member

Откуда: Tashkent, Uzbekistan
Сообщений: 2845
Владимир Машков
Опасаюсь, что дальнейшее развитие событий ни к чему продуктивному нас не приведет.
Давайте лучше, каждый, кого этот вопрос волнует, предложит свой вариант.

1) префикс для хранимой процедуры "sp_" - stored procedure
2) как давать название ... начинать с глагола или с существительного (sp_change_ip или sp_ip_change) ?
3) Использовать или нет подчеркивание в теле названия, а не только в префиксе (sp_ChangeIp или sp_IpChange)?

... жду Ваших высказываний из личного опыта


Что-что, но называть собственные хранимые процедуры через префикс "sp_" не стоит. Кажется сам MS не рекомендует делать это. В таких случаях сервер вашу процедуру будет искать сначала у себя в "master" и только потом в Вашей базе.

В MS SQL Server есть понятие SCHEMA, лично я использую схемы для группировки объектов.
Пример: всё, что относится к отделу сбыта я отношу к схеме "Sale", бухгалтерию - "Book", склад - "WH" и т.д.
"Sale.p_DailySale" - ХП, которая формирует данные для отчёта по ежедневным продажам.
А те объекты, которыми пользуются все, я отношу к схеме "Cmn" (сокращённо от Common).

Более того, и в целях администрирования прав доступа использование схем даёт много удобств, т.к. объекты наследуют права схемы.
27 янв 11, 13:38    [10140371]     Ответить | Цитировать Сообщить модератору
 Re: Этикет хранимых процедур  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Дедушка
следуя вашей логике:
- лично я вот в России и язык государственный у нас русский
Это вы вшей логике следуете, а не моей.
Из того что у нас язык русский, не следует что все названия надо писать по русски. Все названия, имхо, надо писать на том языке, который используется в ключевых словах самого ЯП. Вот будет SQL на русском, тогда пишите по русски.
Дедушка
- код могут смотреть не только гики-программеры но и простые смертные
Зачем простым смертным код, какая разница на чем он написан и как, если они и так и так, ничего не понимают. И вообще, ситуация когда "код могут смотреть простые смертные", по-моему, та ситуация когда следует задуматься о более глобальных проблемах в подходе и архитектуре, чем об именах.
Дедушка
Таблица_Остатки_Месяц_Заказной_Товар_Склад_Урюпинск_Авто_Сторнирование_Правило_2_Только_Аналитическая_Отчётность
зачем в имя таблицы включать: 1) само упоминание что это таблица 2) период 3) город 4) упоминание о том где будет использоваться и т.д. Если у вас, чтобы описать сущность нужно столько слов, это или какие-то проблемы проектирования, или проблемы именования в голове у программиста. В любом случае, если сущность такая уж сложная, что надо 5-6 слов чтобы ее описать, то мое мнение что да, лучше сделать так чем иметь кракозябру, в которой непойми что лежит и каждый раз надо лезть и смотреть что это. Тем более если их много (хотя лично мне непонятно как надо спроектировать систему чтобы все таблицы назывались подобным образом).
27 янв 11, 13:39    [10140384]     Ответить | Цитировать Сообщить модератору
 Re: Этикет хранимых процедур  [new]
Serg_77m
Member

Откуда: Донецк
Сообщений: 237
По поводу имён. Понимаете в чём дело, система сейчас разрослась настолько, что вообще не удаётся сказать несколькими словами что конкретно делает данная функция. Под каждое определение подходит несколько разных, и они чем-то между собой отличаются. Очень длинно получается, если следовать таким правилам. Вот и приходится давать абстрактные имена, а логику писать в комментариях. Всё равно с каждой точки приложения можно проследить что здесь вызывается и как, это быстрее, чем искать по имени.
27 янв 11, 13:48    [10140464]     Ответить | Цитировать Сообщить модератору
 Re: Этикет хранимых процедур  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Владимир Машков
1) префикс для хранимой процедуры "sp_" - stored procedure

Про sp_ вам верно сказали, лучше не использовать.
У нас например не используются префиксы для хп вообще, т.к. я думаю что это бесполезно. Если хп вызывается в коде она и так выполняется как exec myproc, и видно что это ХП (можно еще и с функцией так, но функции мы так не используем). Если в SSMS все процедуры отображаются отдельно от прочих объектов. Так что префикс уточняющий что это именно ХП вроде как и ничем не полезен, по крайней мере не нашел ему применение у нас.
Префиксы я использую при создании view или функций, т.к. в запросах предпочитаю сразу видеть откуда идет выборка из таблицы или из объекта который сам может реализовать какую-то логику. Проще искать ошибки.
27 янв 11, 13:51    [10140487]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить