Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Количество ХП / 25 сообщений из 28, страница 1 из 2
25.07.2005, 12:23
    #33182335
Демиург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество ХП
Еще раз здрасте,
Как более правильно проектировать? Делать одну большую ХП или несколько более мелких? (В смысле, не просто так разбить код на более малые куски, а выделить логику)
И существует ли какое либо ограничение на кол-во ХП по "хорошему тону".
Ну чтоб не краснеть потом за код свой... Я например пишу не очень большой проект, и в нем для работы с документами уже 11 ХП (в принципе увеличения не предвидется) - нормально ли это? Но мне очень удобно вносить изменения в логику...
...
Рейтинг: 0 / 0
25.07.2005, 12:31
    #33182359
Paul Sacks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество ХП
Нормально. Все зависит от самой задачи. У меня их около 500...
...
Рейтинг: 0 / 0
25.07.2005, 12:34
    #33182366
Демиург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество ХП
УХ!
...
Рейтинг: 0 / 0
25.07.2005, 17:51
    #33183415
Роман Дынник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество ХП
в среднем по 4 хп на таблицу (insert,select,update,delete)
у нас около 1600 хп на 400 таблиц.
старайтесь формализовать логику в хранимых процедурах так, чтобы эти хп
можно было сгенерировать по модели БД.


Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
26.07.2005, 09:22
    #33184033
Estets
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество ХП
ДемиургЕще раз здрасте,
Как более правильно проектировать? Делать одну большую ХП или несколько более мелких? (В смысле, не просто так разбить код на более малые куски, а выделить логику)

Были у нас ХП-монстры по 8 тыс строк кода, правда 90 кода процентов генерилось автоматом, опыт показал что такие процедуры очень сильно замедляют работу, и та же логика разбитая на 3 процедуры работает на порядок быстрее. Так что дело вкуса, я придерживаюсь следующих правил:

1) Если существует один логический блок, то более удобно отлаживать и обновлять одну процедуру.
2) Если одинаковый блок расчета встречается более чем в трех процедурах, нужно подумать, а не вынести ли его в отдельную процедуру
3) Если процедура вырастает до неприличных размеров, надо подумать можно ли разбить ее на несколько.
...
Рейтинг: 0 / 0
26.07.2005, 09:30
    #33184049
Estets
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество ХП
Роман Дынник
в среднем по 4 хп на таблицу (insert,select,update,delete)
у нас около 1600 хп на 400 таблиц.
старайтесь формализовать логику в хранимых процедурах так, чтобы эти хп
можно было сгенерировать по модели БД.

У нас документно-ориентированная система в ней более 500 типов документов (около 300 таблиц), к каждому набор методов=ХП, для разных типов разные например список, просмотр, добавить, подтвердить, удалить... соответственно более 4000 процедур.
...
Рейтинг: 0 / 0
26.07.2005, 10:03
    #33184113
PVP
PVP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество ХП
Это из футбола: "Кто дальше бьет, тот лучше играет"
...
Рейтинг: 0 / 0
26.07.2005, 10:09
    #33184130
PVP
PVP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество ХП
В дедовские времена очень прогрессивной была методика (или теория) структурного программирования. По моему все те принципы, правила, рекомендации актуальны и сейчас при разработке хранимых процедур, так это обычное процедурное программирования.

Для меня 1000 строк - это уже большой размер. Стараюсь до этого не доводить. Но иногда получается стихийно. Добавил один блок, другой, третий... Разбивать на отддельные процедуры лень. Хотя, если бы сначала знал, что делаешь, то сделал бы именно по частям.

На счет времени выполнения. Если в SQL 2000 не использовать в заголовке With recompile, то время запроса не зависит от объема процедуры.
...
Рейтинг: 0 / 0
26.07.2005, 10:16
    #33184153
unreger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество ХП
раньше стандартно делал на каждую таблицу 4 процедуры
сейчас работаю с проектом где процедура одна, но у нее есть входная переменная @Action и четыре блока кода

задумался, чуть удобнее в разработке (хотя и сомнительно)
но ведь такая процедура при смене @Action будет слегка напрягать сервер на проверку и постройку нового плана?

PS: и вообще счастье в хибернейте
...
Рейтинг: 0 / 0
26.07.2005, 11:37
    #33184422
Estets
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество ХП
PVPНа счет времени выполнения. Если в SQL 2000 не использовать в заголовке With recompile, то время запроса не зависит от объема процедуры.
Не совсем согласен, большие процедуры обычно содержат работу с временными таблицами, а это может приводить к неоднократным перекомпиляциям процедуры в момент выполнения, с этим кстати связано правило вынесения деклараций всех #таблиц в начало процедуры. ИМХО
...
Рейтинг: 0 / 0
26.07.2005, 14:52
    #33185060
PVP
PVP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество ХП
Estets PVPНа счет времени выполнения. Если в SQL 2000 не использовать в заголовке With recompile, то время запроса не зависит от объема процедуры.
Не совсем согласен, большие процедуры обычно содержат работу с временными таблицами, а это может приводить к неоднократным перекомпиляциям процедуры в момент выполнения, с этим кстати связано правило вынесения деклараций всех #таблиц в начало процедуры. ИМХОО том, что в ходе выполнения запроса, может заново создаваться план выполнения (перекомпиляция процедуры), не знал. Хорошо бы ссылочку в то место, где об этом говорится. То что мне приходилось встречать в документации - это сначала план выполнения, загрузка в память (если этот план там еще не лежит) и затем выполнение.

Из опыта работы, если допущена ошибка в описании временной таблицы, то где бы она не была декларирована, сначала идет диагностика с мгновенной выдачей ошибок, затем инициализация процесса выполнения.
...
Рейтинг: 0 / 0
26.07.2005, 14:56
    #33185075
PVP
PVP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество ХП
Estets...с этим кстати связано правило вынесения деклараций всех #таблиц в начало процедуры. ИМХОТоже ИМХО, конечно, но хорошим тоном считаю декларировать переменые и таблицы в той части процедуры, где они используются. А в начало процедуры вынести только те декларации, которые используются по всему текусту, или в разных его местах. Это повышает читаемость процедур.
...
Рейтинг: 0 / 0
26.07.2005, 15:25
    #33185151
PVP
PVP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество ХП
Еще, насчет количества процедур.

В сложной системе оно растет и растет и ничего с этим не поделать. В SQL 2000 нет практических ограничений их количества. Единственная проблема при большом количестве процедур - это их обслуживание. Во время разработки программисты еще помнят их имена и умеют искать. Но даже сами авторы, спустя год-два забывают как имена, так и где находятся эти процедуры. Поэтому в серьезной системе очень важно иметь возможность оперативного доступа к хранимым процедурам, хотя бы к их именам. А еще лучше - возможность их создания и редактирования.

Я приведу пример из БАС не потому, что это "самая-самая", а потому что больше ничего толком не знаю.

При обработке документов есть джельтменский набор процедур, которые требуется выполнить. Он небольшой. Условно можно назвать: инициализация, расчет, проводка, генерация, печать. Первая - реакция на действия пользователя во время работы. Вторая - выполнение расчетов по команде. Третья - действия, необходимые при проводке операции. Печать - если не достаточно системных средств, генерация - автоматическое создание документов. За несколько лет работы у меня этот состав не поменялся.

Так вот в каждой тиражной системе есть режим настройки операций (документов). Если в свойствах этих документов закрепить имена используемых хранимых процедур, то этим на 50% можно облегчить жизнь программистам внедрения и сопровождения. А если еще рядом с именем положить кнопку, по которой вызывается встроенный SQL-редактор с текстом используемой процедуры - то это 99% успеха программистов сопровождения.
Я уже не говорю о том, что когда встроенный редактор не находит в базе данных процедуру, он создает ее шаблон с указанным именем, списком параметров, наиболее популярными блоками.

Не сочтите это за рекламу, разве что чуть-чуть. Просто это (ИМХО) наиболее надежный способ обеспечить жизнь системе с большим количеством процедур.
...
Рейтинг: 0 / 0
26.07.2005, 15:26
    #33185152
PVP
PVP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество ХП
Это пример описания свойств
...
Рейтинг: 0 / 0
26.07.2005, 15:28
    #33185159
PVP
PVP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество ХП
А здесь реакция на нажатую кнопку. Дальше можно делать многое из того, что SQL Analyzer.
...
Рейтинг: 0 / 0
26.07.2005, 15:33
    #33185177
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество ХП
PVPТоже ИМХО, конечно, но хорошим тоном считаю декларировать переменые и таблицы в той части процедуры, где они используются. А в начало процедуры вынести только те декларации, которые используются по всему текусту, или в разных его местах. Это повышает читаемость процедур.
Это помогает разбираться в коде человеку. А вот машина такого не любит.
Правильный тон для T-SQL это разнесение (по возможности) операторов DDL и DML в группы. Это даёт более стабильные и верные планы выполнения.
Так неправильно:
DML
DDL
DML
DDL
DML
DDL
....
Так правильно:
DDL
DDL
DDL
DML
DML
....
...
Рейтинг: 0 / 0
26.07.2005, 15:43
    #33185207
PVP
PVP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество ХП
LSV PVPТоже ИМХО, конечно, но хорошим тоном считаю декларировать переменые и таблицы в той части процедуры, где они используются. А в начало процедуры вынести только те декларации, которые используются по всему текусту, или в разных его местах. Это повышает читаемость процедур.
Это помогает разбираться в коде человеку. А вот машина такого не любит.
Правильный тон для T-SQL это разнесение (по возможности) операторов DDL и DML в группы. Это даёт более стабильные и верные планы выполнения.
Так неправильно:
DML
DDL
DML
DDL
DML
DDL
....
Так правильно:
DDL
DDL
DDL
DML
DML
....Согласен с этим утверждением. Можно составлять так программы, что серверу будет легче. Только обычно предпочитаю упростить жизнь программисту. Чем нагляднее процедура, тем легче она воспринимается программистами, как авторами, так и теми, кому после этих авторов приходится заниматься с этими процедурами. Следовательно, ее легче сделать, а значит допустить меньше ошибок. В итоге, она будет работать лучше.
...
Рейтинг: 0 / 0
26.07.2005, 16:01
    #33185263
Programmer_Ortodox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество ХП
PVPА здесь реакция на нажатую кнопку. Дальше можно делать многое из того, что SQL Analyzer.
Мне понравилось! Следующим шагом могло бы быть введение интерпретатора встроенного языка,языка не "китайского" , а того, что учат в школе
...
Рейтинг: 0 / 0
26.07.2005, 16:05
    #33185276
PVP
PVP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество ХП
Programmer_Ortodox PVPА здесь реакция на нажатую кнопку. Дальше можно делать многое из того, что SQL Analyzer.
Мне понравилось! Следующим шагом могло бы быть введение интерпретатора встроенного языка,языка не "китайского" , а того, что учат в школеНаверное, Вы имеете в виду то, что пробел после запятой ставится, а перед - нет? И в конце предложения ставится точка? Предлагаю для изучения грамматики завести другой топик.
...
Рейтинг: 0 / 0
26.07.2005, 16:14
    #33185306
Programmer_Ortodox
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество ХП
хе-хе, имелся ввиду язык программирования!
...
Рейтинг: 0 / 0
26.07.2005, 16:20
    #33185332
PVP
PVP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество ХП
Programmer_Ortodoxхе-хе, имелся ввиду язык программирования!ОК. Принимается.
...
Рейтинг: 0 / 0
26.07.2005, 18:19
    #33185686
Estets
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество ХП
Programmer_Ortodoxхе-хе, имелся ввиду язык программирования!
Попытки 1С перевести SQL на русский... что то коробит меня от этого ;)
...
Рейтинг: 0 / 0
26.07.2005, 18:38
    #33185708
PVP
PVP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество ХП
Estets Programmer_Ortodoxхе-хе, имелся ввиду язык программирования!
Попытки 1С перевести SQL на русский... что то коробит меня от этого ;)Ну вот, это же шутка Programmerа_Ortodoxа.

А вот серьезно, на счет языка. У меня есть опыт проведени курсов по SQL 2000 в местном универе. Синтаксис, основные операторы осваиваются за несколько часов. При этом не зависимо от специальности. Бухгалтера идут практически на уровне с прикладной математикой. Вся дальнейшая работа - это изучение программирования как такового. Поэтому совершенно не важно, на коком языке записывать программы. Важны технология, стиль, чувство компьютера, пользователя, ориентировка в задаче.
...
Рейтинг: 0 / 0
26.07.2005, 19:20
    #33185760
Estets
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество ХП
PVPА вот серьезно, на счет языка. У меня есть опыт проведени курсов по SQL 2000 в местном универе. Синтаксис, основные операторы осваиваются за несколько часов. При этом не зависимо от специальности.
Кхе SQL единственный язык из 4-х команд S,U,I,D, ну из 6-ти если брать Drop и Create, и не брать Transact/PL составляющую.
...
Рейтинг: 0 / 0
26.07.2005, 19:39
    #33185774
PVP
PVP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество ХП
Estets PVPА вот серьезно, на счет языка. У меня есть опыт проведени курсов по SQL 2000 в местном универе. Синтаксис, основные операторы осваиваются за несколько часов. При этом не зависимо от специальности.
Кхе SQL единственный язык из 4-х команд S,U,I,D, ну из 6-ти если брать Drop и Create, и не брать Transact/PL составляющую.Не знаю, как на счет единственного, но на работая только на этом языке при наличии хорошого инструментария и хорошо ориентируюясь в предметной области можно делать сложнейшие системы. А какая цель изучения языка программирования? Это только инструмент, не более. Если он позволяет решать стоящие задачи, то этого достаточно. Заточите топор со всех сторон, легче будет рубить дрова?

И еще, между нами, девочками. Давайте откроем содержание по описанию T-SQL и посмотрим, сколько там ключевых слов, сколько функций, SETов, потом заглянем на DMO. Там их окажется побольше шести. Интересно, Вы их все помните? Так, что бы писать без подглядывания в Help.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Количество ХП / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]