powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / linq2sql vs хранимые процедуры
25 сообщений из 119, страница 2 из 5
linq2sql vs хранимые процедуры
    #37104540
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSalexeyvgПроцедуры - это один из способов разделения уровней приложения.


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

Это новое слово в теории! :-)

Как раз ООП для варианта с строго прописанными интерфесами взаимодействия систем подходит очень даже хорошо.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37105616
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosобе варианта присутствует
в режиме навигации - тянется точка входа в граф и ленивая загрузка по мере навигации по графу
в режиме макротипов - сразу грузится связанный подграф (никто ничего не подгружает)
вот, замечательно. Итого, если мы хотим получить список всех 9-ти этажных домов всех улиц (скажем что-бы пометить их что необходима инспекция лифтов) ваш запрос привезет на клиента полный граф, содержащий даже паспортные данные владельца каждой квартиры каждого дома. Если-же вы там переключите свой режим на навигационный, то получите пулеметную очередь из запросов на дома каждой улицы.

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

ViPRosесли Именно фильтрация , то можно явно задвать IsNull и т.д.

я надеюсь вы в курсе, что только-что отправили ваш запрос на full scan таблицы?
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37105619
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgхранимые процедуры это конечно хорошо. Вот только что делать, если клиенты написаны с ООП подходом? Вы обьекты прямо на ХП маппить собираетесь?Что то я не понял - если в источнике данных нет таблиц, то ООП подход к написанию приложения неприменим? То есть все программы, которые получают данные, например, из Веб-сервисов, файлов, изображений и т.п. не могут быть написаны с использованием ООП?

Это новое слово в теории! :-)

Как раз ООП для варианта с строго прописанными интерфесами взаимодействия систем подходит очень даже хорошо.[/quot]
к вам такой-же вопрос про графы. Расскажите-ка как ваши графы грузяться используя "строго прописанные интерфейсы взаимодействия систем"
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37105622
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgКак раз ООП для варианта с строго прописанными интерфесами взаимодействия систем подходит очень даже хорошо

к вам такой-же вопрос про графы. Расскажите-ка как ваши графы грузяться используя "строго прописанные интерфейсы взаимодействия систем"
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37105811
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSalexeyvgКак раз ООП для варианта с строго прописанными интерфесами взаимодействия систем подходит очень даже хорошо

к вам такой-же вопрос про графы. Расскажите-ка как ваши графы грузяться используя "строго прописанные интерфейсы взаимодействия систем"
Вы про этот вопрос?
StalkerSграф обьектов как тянуть собираетесь к примеру? Скажем Streets -> Houses -> Flats. Дома и квартиры будут сразу затянуты на клиента вместе с улицей, или через ленивую загрузку?
Получение обьектов по какому-либо критерию - все дома, где есть владелец квартиры Вася. Тоже будет отдельная ХП, верно?
Да, для нужных бизнес-действий будут нужны соответствующие интерфейсы.

У вас-же код не получается сам по себе, его же пишут?

Просто вы к написанию ХП относитесь со страхом - как это, НАПИСАТЬ ХП???

Да, будут разные ХП для работы получением данных из структуры Streets -> Houses -> Flats, они будут возвращать разные наборы атрибутов и иметь разные параметры, в зависимости от назначения.

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

В каких то случаях использование ORM будет упрощать программирование получения данных, но в ущерб скорости, и упрощение общей работы очень маленькое, потому как получение данных - не самая трудоёмкая для программиста часть работы.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37105837
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSViPRosесли Именно фильтрация , то можно явно задвать IsNull и т.д.

я надеюсь вы в курсе, что только-что отправили ваш запрос на full scan таблицы?Вы просто не задумывались, как можно структурировать и вообще организовывать код на стороне СУБД.

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

Ну и в крайнем, совсем запущенном случае, можно использовать динамический SQL. Это всё же лучьше, чем формировать SQL на клиенте.

То есть в вашем примере с графом можно сделать 3 процедуры отображения графа с различными атрибутами, и 5 процедур фильтрации, с несколькими наборами параметров. И это покроет все варианты запросов к этим структурам данных.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37106044
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgСоответственно, клиент вызывает процедуру выборки с нужными фильтрами и в параметре указывает, какой вид отображения ему нужен (про этому критерию из этой процедуры вызывается соответствующая процедура отображения найденного результата).

Ну и в крайнем, совсем запущенном случае, можно использовать динамический SQL. Это всё же лучьше, чем формировать SQL на клиенте.

То есть в вашем примере с графом можно сделать 3 процедуры отображения графа с различными атрибутами, и 5 процедур фильтрации, с несколькими наборами параметров. И это покроет все варианты запросов к этим структурам данных.
о как, аж 8 процедур на чтение для 3-х простеньких сущностей. Кроме того, не забывайте, что сущности должны также уметь добавляться, удаляться и апдейтится. Сколько-же их будет?
Можете привести схематично что это за процедуры ? А то честно говоря из того что вы написали я слобо представляю как данные из БД с помощью ваших процедур окажутся в моем графе.
Юзер-кейсы, которые я приводил это поиск 9-ти этажных домов по всем улицам, можно добавить обновление статуса квартиры если задолженность там превысила порог, или удаление чего-нибудь
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37106079
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
из того что вы написали я слабо представляю как данные из БД с помощью ваших процедур окажутся...Это решается повышением квалификации в области СУБД. :)

А теперь поведайте нам про безопасность системы, работающей прямыми запросами.
Также интесна борьба с SQL-injection и присечением выполнения запросов запрещенных логикой приложения.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37106282
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVиз того что вы написали я слабо представляю как данные из БД с помощью ваших процедур окажутся...Это решается повышением квалификации в области СУБД. :)

А теперь поведайте нам про безопасность системы, работающей прямыми запросами.
Также интесна борьба с SQL-injection и присечением выполнения запросов запрещенных логикой приложения.
это вы нам для начала поведайте процедуру перемещения данных их БД в граф объектов, внятного ответа я пока ни от кого не получил.
Или вы за сутки так и не придумали ответ?
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37106580
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSо как, аж 8 процедур на чтение для 3-х простеньких сущностей. Кроме того, не забывайте, что сущности должны также уметь добавляться, удаляться и апдейтится. Сколько-же их будет? А сколько у вас обычно в приложении строк кода, работающих с данными из трёх простеньких сущностей? Я подозреваю, что тыща на сущность, если конечно простенькое приложение. В сложном может быть наверное десяток тыщ.

Вам просто неприятно ТАКОЕ распределение кода между языками? Надо же, 8 (ВОСЕМ!!!) процедур на 3 сущности.

У нас десятки процедур на сущность, ничего страшного. Всё равно клиентского кода получается больше, так что затраты на интерфейс у СУБД маленькие.

Зато он есть, интерфейс.

Насчёт простых добавлений удалений и т.д - в последнем проекте разрабтчики использовали ОРМ для таких операций.

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

Просто вы это программируете не в ХП, а мы в ХП, но кода у нас при этом вряд-ли больше. SQL всё таки достаточно высокоуровневый и выразительный язык.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37106617
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSэто вы нам для начала поведайте процедуру перемещения данных их БД в граф объектов, внятного ответа я пока ни от кого не получил.
Или вы за сутки так и не придумали ответ? Мне, честно говоря, нечего сказать.

Я не понимаю, какие тут могут быть трудности и о чём вопрос. Просто читаются приложением данные и всё. Командами "выполнить процедуру" и "прочитать строку из рекордсета".
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37106618
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSViPRosобе варианта присутствует
в режиме навигации - тянется точка входа в граф и ленивая загрузка по мере навигации по графу
в режиме макротипов - сразу грузится связанный подграф (никто ничего не подгружает)
вот, замечательно. Итого, если мы хотим получить список всех 9-ти этажных домов всех улиц (скажем что-бы пометить их что необходима инспекция лифтов) ваш запрос привезет на клиента полный граф, содержащий даже паспортные данные владельца каждой квартиры каждого дома. Если-же вы там переключите свой режим на навигационный, то получите пулеметную очередь из запросов на дома каждой улицы.

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

ViPRosесли Именно фильтрация , то можно явно задвать IsNull и т.д.

я надеюсь вы в курсе, что только-что отправили ваш запрос на full scan таблицы?
Ты лучше не гадай , а поспрашивай. :) Никаких пулеметов и очередей. Есть навигационный граф, и есть помеченнные подграфы (макротипы).
Вот часть графа, и макротип.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37106619
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37106634
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и если у тебя в БД есть поля NULLable ,то я не могу запретить тебе их сравнить на нулевость, лучше ты уж не проектируй так, что бы иметь дело с нулл.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37106654
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

а вот автоматически сгенерированная форма для макротипа
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37106691
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

Навигационный режим - для визуального анализа данных и построения отчетности, и еще очень хорош время проектирования.
Режим макротипов - основной режим работы спректированного (сгенерированного из метеданных + нелинейные методы) приложения.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37106712
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

в навигацинном режиме граф грузится принудитльно, по мере телодвижений клиента, в режиме макротипов граф грузится строго по макротипам (целостно, макротип неделимый транзакционый элемент системы), даже простые типы имеют дефольтное макротипное представление, при этом типы структруирующие разные макротипы могут быть из одного и того же множества типов, что не мешает целостному опрерированию макротипами.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37107008
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgЯ не понимаю, какие тут могут быть трудности и о чём вопрос. Просто читаются приложением данные и всё. Командами "выполнить процедуру" и "прочитать строку из рекордсета".И я не понимаю. А человек вот тут из этого рокет-сайенс пытается сделать. :)

Напоминает задачу Х=1+2 на С++ на три листа.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37107038
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSValexeyvgЯ не понимаю, какие тут могут быть трудности и о чём вопрос. Просто читаются приложением данные и всё. Командами "выполнить процедуру" и "прочитать строку из рекордсета".И я не понимаю. А человек вот тут из этого рокет-сайенс пытается сделать. :)


Подозреваю, что человек говорить не о явных вызовах "чтение-запись" разной грануляности по усмотрению прогера, а о какой то встроенной семантике.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37107135
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgА сколько у вас обычно в приложении строк кода, работающих с данными из трёх простеньких сущностей? Я подозреваю, что тыща на сущность, если конечно простенькое приложение. В сложном может быть наверное десяток тыщ.

Вам просто неприятно ТАКОЕ распределение кода между языками? Надо же, 8 (ВОСЕМ!!!) процедур на 3 сущности.

У нас десятки процедур на сущность, ничего страшного. Всё равно клиентского кода получается больше, так что затраты на интерфейс у СУБД маленькие.

Зато он есть, интерфейс.

Насчёт простых добавлений удалений и т.д - в последнем проекте разрабтчики использовали ОРМ для таких операций.

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

Просто вы это программируете не в ХП, а мы в ХП, но кода у нас при этом вряд-ли больше. SQL всё таки достаточно высокоуровневый и выразительный язык.
имхо, вы не так поняли вопрос, который я задавал. Мы сейчас не говорим о распределении бизнес-логики - обсуждается ООП и вся бизнес-логика находиться в объектах, а не в ХП. Мы говорим про то, как читать/добавлять/удалять/обновлять объекты, когда интерфейс БД задан только через хранимые процедуры. Обсуждается только тот кусок системы, который отвечает за маппинг объектов на таблицы базы данных, не больше не меньше.

Повторю начальные условия:
Есть три класса доменной модели -
Код: plaintext
1.
2.
class Street...
class House...
class Flat...

Есть три таблицы в БД:
Код: plaintext
1.
2.
table Streets...
table Houses...
table Flats...
Задача - данные из таблиц материализовать в классы модели и обратно.
Один из возможных юзеркейсов - получить коллекцию 9-ти этажных домов со всех улиц. Или проапдейтить статут квартир у которых задолженность выше пороговой.

Для примера, на linq2sql для этого было-бы написано что-то типа:

Код: plaintext
1.
2.
3.
var query =
from s in streets.Street
from h in streets.House
where s.ID == h.HouseID and h.Floors = 9
Был-бы автоматически сгенерирован запрос с джойном между улицами и домами. Резалтсет был-бы затем превращен в классы доменной модели.

Вопрос: покажите, как это будет реализовано у вас, в случае когда таблицы закрыты забором из ХП. Интересует как работает цепочка tables -> ... -> domain class.
Желательно показать кодом (схематично).

ViPRosЕсть навигационный граф, и есть помеченнные подграфы (макротипы).

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

ViPRosи если у тебя в БД есть поля NULLable ,то я не могу запретить тебе их сравнить на нулевость, лучше ты уж не проектируй так, что бы иметь дело с нулл.

это сейчас о чем? ;) Про необязательные параметры? При чем тут nullable поля?

Код: plaintext
1.
2.
3.
4.
5.
create procedure Test
@name varchar( 100 ),
@surname varchar( 100 )
as

select * from People where Name = @name ...
допиши эту процедуру, что-бы в случае когда @surname is null поиск происходил только по имени, а когда не null - по имени и фамилии
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37107389
Фотография Megabyte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помимо безопасности, разделения кода на слои, не стоит забывать о том, что ХП - это защита от дурака. Использование правильно написанных ХП не приведет данные в БД к некорректности, не даст криворукому програмисту, разрабатывающему клиента, поломать данные. У него просто не будет прав на это. Да при программисту , пишущему клиента, иногда вообще не стоит знать структуру данных в БД.
В MSSQL даже придумали такие модные вещи, как instead-триггеры. Вешаешь его на модифицирующую вьюху(вот тебе и сущность), в триггере редактируешь данные, а из каких таблиц во вьюху данные попатают, тебе и знать незачем...

StalkerS , что вы со своими графами так привязались... Вам уже 10 раз написали: на каждую сущность будет несколько процедур: читающая, читающая с фильтром, модицирующая(инсерт, апдейт), удаляющая. В процедурах модификации так же можно настроить проверку корректности изменения и удаления.
+ ХП - это предварительно скомпилированный код, и он работает немного быстрее , чем прямой sql-код.
+ для систем(веба, например) со слабым каналом связи по интернету это ведет к уменьшению запроса, т.к. на сервер передается только вызов ХП, а не текст запроса, который может быть большим.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37107397
Фотография Megabyte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerS

Код: plaintext
1.
2.
3.
4.
5.
create procedure Test
@name varchar( 100 ),
@surname varchar( 100 )
as

select * from People where Name = @name ...
допиши эту процедуру, что-бы в случае когда @surname is null поиск происходил только по имени, а когда не null - по имени и фамилии
Код: plaintext
1.
2.
3.
if @surname is null
select * from People where Name = @name
else
select * from People where Name = @name and surname = @surname 
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37107471
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerSимхо, вы не так поняли вопрос, который я задавал. Мы сейчас не говорим о распределении бизнес-логики - обсуждается ООП и вся бизнес-логика находиться в объектах, а не в ХП. Мы говорим про то, как читать/добавлять/удалять/обновлять объекты, когда интерфейс БД задан только через хранимые процедуры. Обсуждается только тот кусок системы, который отвечает за маппинг объектов на таблицы базы данных, не больше не меньше.Не увидел я такого изменения темы, по крайней мере в вашем первом посте.

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

ХП нужны только как интерфейс к СУБД, ни для чего больше.

Это как обсуждение варианта - использовать для обращения у серверу приложений веб-сервисы или открыть его память клиенту и обращаться напрямую.
Если ставится жёсткое условие - клиент будет работать только с внутренними объектами апп-сервера, которые у него в памяти и никогда - с определёнными кем-то интерфейсами, то городить веб-сервисы для обращения к памяти просто глупо.
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37107486
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StalkerS,

ты просто не въехал :)
грузится именно помеченный подграф(макротип, бизнес-объект, агрегатный класс,,. как хошь назови), а не произвольный
процедуру эту дописывает автоматом на случай нулл даже адо.нет :)
к картинкам бы надо было посерьезнее присмотреться
...
Рейтинг: 0 / 0
linq2sql vs хранимые процедуры
    #37107495
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я воще то понимаю что тебя мучает -
как грузить нужную проекцию нужного подграфа :)
...
Рейтинг: 0 / 0
25 сообщений из 119, страница 2 из 5
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / linq2sql vs хранимые процедуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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