|
Эффективность, читабельность, сопровождаемость SQL кода
|
|||
---|---|---|---|
#18+
Тема для многих личная, заведомо субъективная, поэтому давайте больше примеров хорошего кода, не более 20 строк. Если очень хочется покритиковать код опубликованный другими участниками, то критикуйте конструктивно - указав недостатки и переделав код так, как считаете правильно. Если пост бесполезный для других с точки зрения образования, то сюда его не надо. Есть много других тем для желчи. Я начну с кусочка кода, который написал вчера для иллюстрации моего метода проверки параметров запроса: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Кто-то прокомментировал, что не хотели бы сопровождать такой код. Как его сделать лучше? Запрос достаточно простой - он выдает таблицу из двух колонок (текст, число) разных полезных значений, предварительно проверив входные параметры, чтоб не генерить белиберду или пустую таблицу при плохих исходных. Я знаю об одном недостатке этого кода - порядок строчек оставлен на произвол БД, удобного ключа сортировки нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 17:30 |
|
Эффективность, читабельность, сопровождаемость SQL кода
|
|||
---|---|---|---|
#18+
НеофитSQL, SQL и "не более 20 строк" - это оксюморон. Кроме того, слепящие глаз "вершины SQL" хорошо бы показывать в привязке к возможностям версии конкретной версии системы. Современные версии позволяют не выполнять клиентский запрос и другими способами, и без выброса сообщений об ошибках, а "универсальный" SQL существует только в книжках сомнительной полезности. Цель какая у сообщения об ошибке - это доброжелательная помощь взломщику вашего кода, вы хотите пользователя чему-то "обучить", или какая-то иная? Может быть, это сообщение для себя самого, такого сорта: "Если вы видите этот текст, значит программист ошибся. Сообщите в службу поддержки." ? Вот вам восторг без желчи - зашибись. Вот вам конструктивная критика: Надо всегда оставлять существо дело - когда код пишется, чтобы его комментировать столь общирно, разумно выбросить сам код и оставить главное - комментарий, расширив его, при необходимости, до 20 строк. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 18:22 |
|
Эффективность, читабельность, сопровождаемость SQL кода
|
|||
---|---|---|---|
#18+
НеофитSQL Есть много других тем для желчи. Решать нужно бизнес задачи и в комплексе, а не высосанные из пальца "я защищаюсь от "плохих" параметров". Если результатом твоей работы является запросишко, то ты просто мелкий sql-раб, мнящий о себе невесть что. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 19:19 |
|
Эффективность, читабельность, сопровождаемость SQL кода
|
|||
---|---|---|---|
#18+
booby НеофитSQL, Может быть, это сообщение для себя самого, такого сорта: "Если вы видите этот текст, значит программист ошибся. Сообщите в службу поддержки." ? Да, именно так. На ситуации, где правильность и целостность системы под вопросом, желательно реагировать немедленно. В мой запрос не должны попадать некорректные параметры, и сегодня не попадают. Я знаю, потому что проверяю. Это может измениться когда код над моим запросом изменится, мой код запроса целиком скопипастят в другую часть системы, или превратят в подчиненный запрос другого запроса, который шлет мусор. В моем случае, сообщение "звоните поддержке" скорее всего увидит программист который дал моему запросу плохой параметр, даже при самом примитивном тестировании. Это отличается от случая когда он запустил мой запрос, увидел что-то на экране, и решил что все в порядке. Проверка параметров, это выбор каждого. Мои функции в сях проверяют указатели на читаемость/писаемость памяти, как это делают все системные функции Windows начиная с 2003. Это правильный уровень защиты для опубликованного API, но может казаться "слишком" для внутреннего использования. Зато если процесс крэшнулся, это никогда не в моей DLL. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 19:29 |
|
Эффективность, читабельность, сопровождаемость SQL кода
|
|||
---|---|---|---|
#18+
НеофитSQLВ моем случае, сообщение "звоните поддержке" скорее всего увидит программист который дал моему запросу плохой параметр, даже при самом примитивном тестировании. Это отличается от случая когда он запустил мой запрос, увидел что-то на экране, и решил что все в порядке. А как это может случиться если у тебя весь код обвешан юнит-тестами и данные, возвращаемые запросом проверяются на соответствие заданным автоматически, без "увидел что-то на экране"? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 20:07 |
|
Эффективность, читабельность, сопровождаемость SQL кода
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov НеофитSQLВ моем случае, сообщение "звоните поддержке" скорее всего увидит программист который дал моему запросу плохой параметр, даже при самом примитивном тестировании. Это отличается от случая когда он запустил мой запрос, увидел что-то на экране, и решил что все в порядке. А как это может случиться если у тебя весь код обвешан юнит-тестами и данные, возвращаемые запросом проверяются на соответствие заданным автоматически, без "увидел что-то на экране"? Очень просто, подумай: Мои юнит тесты проверяют мой код, и находят ошибки в моем коде. Мусорные параметеры приходят от других, которых мои юнит тесты не проверяют. Ты же знаешь, что такое юнит тест, или просто поторопился сделать комментарий? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 20:36 |
|
Эффективность, читабельность, сопровождаемость SQL кода
|
|||
---|---|---|---|
#18+
НеофитSQL ... В моем случае, сообщение "звоните поддержке" скорее всего увидит программист который дал моему запросу плохой параметр, даже при самом примитивном тестировании. Это отличается от случая когда он запустил мой запрос, увидел что-то на экране, и решил что все в порядке. .... О, да ты великолепен! То есть ты не свои ошибки таким образом проявлять собрался, а обучать других программистов, как пользоваться твоими запросами, собираешься... Это пять баллов. Но попробуй принять в расчёт, что дела с тобой иметь никто не будет . И это, курьеров-то у тебя, распространяющих твои запросы среди жаждущих их использования программистов уже сейчас сколько, тысяч сто наберется? При таких задатках тебе бы не стоило заниматься такой фигнёй, как написание sql-запросов. Садись сразу пиши корпоративные правила оформления кода и протоколы взаимодействия программистов. Жалко такой талант на ерунду разменивать. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2020, 21:11 |
|
Эффективность, читабельность, сопровождаемость SQL кода
|
|||
---|---|---|---|
#18+
Понижайте градус агрессии, пока совсем в оскорбления не свалились... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2020, 00:23 |
|
Эффективность, читабельность, сопровождаемость SQL кода
|
|||
---|---|---|---|
#18+
НеофитSQL, Проверку параметров оставь прикладному уровню; запанибратством с терминологией можешь блеснуть в прямом общении с коллегами, но документируя код, делай это не на смеси английского с придурковатым. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2020, 03:19 |
|
Эффективность, читабельность, сопровождаемость SQL кода
|
|||
---|---|---|---|
#18+
booby То есть ты не свои ошибки таким образом проявлять собрался, а обучать других программистов, как пользоваться твоими запросами, собираешься... Конечно, для этого и пишется техническая документация, чтоб обучать других программистов. Так учили меня, и так я учил других, когда это было моей работой. booby При таких задатках тебе бы не стоило заниматься такой фигнёй, как написание sql-запросов. Садись сразу пиши корпоративные правила оформления кода и протоколы взаимодействия программистов. Жалко такой талант на ерунду разменивать. Это было в прошлых работах. Сейчас я приношу некоторую пользу написанием SQL запросов, и изучением/применением новых для меня языков программирования, и технологий, до которых раньше не доходили руки и не было времени. SQL один из них, и мой хороший коллега посоветовал этот форум, где много знающих людей бывает. Я уже нескольких встретил. Тема про образование других программистов поднята хорошая, даже если тон выбран неудачно. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2020, 07:01 |
|
Эффективность, читабельность, сопровождаемость SQL кода
|
|||
---|---|---|---|
#18+
НеофитSQL, опубликовано на правах GPL v3 / published under GPL v3 Инлайн, квери.... Тьфу, кровь из глаз. Правильный код комментирует себя сам. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2020, 08:35 |
|
Эффективность, читабельность, сопровождаемость SQL кода
|
|||
---|---|---|---|
#18+
НеофитSQL Сейчас я приношу некоторую пользу написанием SQL запросов ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2020, 08:39 |
|
Эффективность, читабельность, сопровождаемость SQL кода
|
|||
---|---|---|---|
#18+
SQL-код с удобными включателями/выключателями/переключателями (которые управляются комментариями или параметрами) нужен только в сугубо утилитарных скриптах для конкретной задачи, за ее пределами он никому не нужен. А в рабочих задачах "производительность" с разгромным счетом побеждает "гибкость" и универсальные запросы не нужны. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2020, 10:39 |
|
Эффективность, читабельность, сопровождаемость SQL кода
|
|||
---|---|---|---|
#18+
Вообще, скоро появятся макросы... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2020, 12:55 |
|
Эффективность, читабельность, сопровождаемость SQL кода
|
|||
---|---|---|---|
#18+
И тогда наступит настоящий ад ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2020, 15:43 |
|
Эффективность, читабельность, сопровождаемость SQL кода
|
|||
---|---|---|---|
#18+
Вячеслав Любомудров, А я, как оптимист, надеюсь, что (как минимум скалярные) макросы дадут существенный прирост производительности ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2020, 16:06 |
|
Эффективность, читабельность, сопровождаемость SQL кода
|
|||
---|---|---|---|
#18+
Количество переключений контекста должно существенно снизиться, прозрачность повыситься, только хз как тюнить потом такие запросы... Надо как-нибудь на досуге покопать, но скорее всего реальные запросы можно будет видеть и у них будут свои sql_id ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2020, 16:10 |
|
Эффективность, читабельность, сопровождаемость SQL кода
|
|||
---|---|---|---|
#18+
НеофитSQL booby То есть ты не свои ошибки таким образом проявлять собрался, а обучать других программистов, как пользоваться твоими запросами, собираешься... Конечно, для этого и пишется техническая документация, чтоб обучать других программистов.... Тема про образование других программистов поднята хорошая, даже если тон выбран неудачно. Мда, запущенный случай. Похоже, уже не операбельный. Ладно, раз тема про комментарии попробуем так зайти: вот здесь https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1329011&msg=22194853 для обоснования красоты твоего, перенесенного в этот топик, запроса ты используешь аналогию: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Этот конкретный пример был предельно неудачен именно по причине того, что в нём не используется Raise_Application_Error. Он не аналогичен показанному в первом посте этого топика запросу. Поэтому что возмьём за пример аналогии такой текст: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Отформатируем его в предложенном в первом посте данного топика стиле "лучших практик": Код: plaintext 1. 2. 3. 4.
Очевидно что так стало несопоставимо лучше... Что же, может и стало, для тех, кому надо прочитать всего лишь одну строку... Теперь код нужно откомментировать. Я позволю себе не тратить драгоценное время "другого программиста" на особо ценные замечания сорта "первая строчка задает имена и типы колонок", и, тем более, на "published under GPL v3" Просто добавим содержательный комментарий для такого "другого программиста", которого "нужно обучить", потому что он, может быть, не понимает, что здесь происходит. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54.
Пожалуй, я даже не буду спрашивать у вас, где и как проходит граница "обучающих других программистов" комментариев. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2020, 17:19 |
|
Эффективность, читабельность, сопровождаемость SQL кода
|
|||
---|---|---|---|
#18+
xtender Вообще, скоро появятся макросы... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2020, 06:54 |
|
Эффективность, читабельность, сопровождаемость SQL кода
|
|||
---|---|---|---|
#18+
НеофитSQL читабельность, сопровождаемость SQL кода Ха-ха. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2020, 07:45 |
|
Эффективность, читабельность, сопровождаемость SQL кода
|
|||
---|---|---|---|
#18+
НеофитSQL Как его сделать лучше? Никак. У нас есть такая же шляпа из union all на 1к строчек. НеофитSQL Я знаю об одном недостатке этого кода Вообрази, что у тебя там параметров не 4, а 400 и выборки везде не по count таблички с условием, а что-нибудь более толстое. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2020, 07:54 |
|
Эффективность, читабельность, сопровождаемость SQL кода
|
|||
---|---|---|---|
#18+
НеофитSQL предварительно проверив входные параметры, чтоб не генерить белиберду или пустую таблицу при плохих исходных В таком случае, необходимо ещё предварительно проверить все таблицы, используемые в запросе, вдруг нехороший пользователь вбил туда неидеальные данные, или нехороший разработчик другой задачи что-то изменил в уникальности полей соединения, или ... упд. Задумайтесь хоть немного о том, что декларативное описание извлечения данных из множеств зависит не только от параметров вашего запроса. Запрос возвращающий хорошие данные на юнит-тесте запросто может вернуть на реальных данных совершенно неожиданный результат. Просто потому, что оттачивая проверку параметров вы не удосужитесь проверить уникальность условий соединения множеств. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2020, 09:23 |
|
Эффективность, читабельность, сопровождаемость SQL кода
|
|||
---|---|---|---|
#18+
НеофитSQL Код: plsql 1.
Как насчёт привести тогда уж и код функции, а если внутри неё используются системные оракловые, то срочно начать рыть доку в поисках условий распространения кода с их использованием? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2020, 09:28 |
|
Эффективность, читабельность, сопровождаемость SQL кода
|
|||
---|---|---|---|
#18+
env В таком случае, необходимо ещё предварительно проверить все таблицы, используемые в запросе, вдруг нехороший пользователь вбил туда неидеальные данные ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2020, 10:35 |
|
Эффективность, читабельность, сопровождаемость SQL кода
|
|||
---|---|---|---|
#18+
andreymx env В таком случае, необходимо ещё предварительно проверить все таблицы, используемые в запросе, вдруг нехороший пользователь вбил туда неидеальные данные Одна из инициатив в моей новой работе - посмотреть на целостность/качество данных по таблицам, и по их взаимосвязям, и поднять/удержать качество данных ночной автоматизацией. Это уже потихоньку делается, косяки и несоответствия потихоньку исправляются, данные становятся здоровее. Потому что как пример 2/30 показывает, бывают ошибки (как при вводе, так и при выборе типов данных). В своем PL/SQL коде я по возможности предохраняюсь. Например, select into может выбить, если вернул количество строк отличное от одного. Если поиск по уникальному ключу, то про много строк можно и не беспокоиться, а пустой результат возможен, хотя вроде и не должен быть. В этом случае мой код логнет ошибку с известными параметрами, а я на следующий день посмотрю таблицу ошибок чтоб посмотреть где ошибка - в коде, в дизайне или в данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2020, 23:22 |
|
|
start [/forum/topic.php?fid=52&fpage=37&tid=1880902]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 314ms |
total: | 450ms |
0 / 0 |