metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-06-29 06:21 pm

Обучение частным случаям частных реализаций

http://d4s.livejournal.com/210142.html
Вопрос про обучение SQL. Не про продажу человеко-часов конкретному кастомеру с конкретной СУБД.
В комментариях ад содома и гоморры, с приведением каких-то дичайших конструкций из частных реализаций.

Людей нужно хотя бы обучить тому, что такое реляционная модель, что такое индексы и как вообще связаны эти буковки с результатом. А уж конкретные извращения можно изучить в процессе работы с конкретной БД, очевидно, что засирать этим голову ДО понимания базовых вещей совершенно не нужно.

[identity profile] tzirechnoy.livejournal.com 2012-06-29 04:20 pm (UTC)(link)
А что, кто-то кроме конченных быдлокодеров ещё пишэт на ORM? Мне казалось, что ещё пятилетку назад вменяемые люди поняли, что это безсмыслица -- пытаться выразить реляцыонные понятия в объектных диалектах.

[identity profile] w00dy.livejournal.com 2012-06-29 04:46 pm (UTC)(link)
Очередной песец элементарных селектов?

[identity profile] theiced.livejournal.com 2012-07-01 12:19 am (UTC)(link)
реляционные понятия не нужны в 99.99999% случаев. те пидорюги который городят неныжный сикль там где он соответсвенно не нужен (а не нужен он - см. выше %) должны сдохнуть от диареи сожрав собственное говно.

[identity profile] metaclass.livejournal.com 2012-07-01 12:28 am (UTC)(link)
Я не знаю, как белорусскую налоговую отчетность делать на мап-редьюс и eventual consistency.
Вернее знаю, но это какой-то закат солнца вручную, откровенный.

[identity profile] theiced.livejournal.com 2012-07-01 08:54 am (UTC)(link)
логика не должна быть в базе. база - тупой сторэж который может сделать select * from foo where bar=baz и ничего более.

[identity profile] metaclass.livejournal.com 2012-07-01 09:10 am (UTC)(link)
Нет.
Объясняю почему: у тебя лежит 50 гигабайт проводок, тебе нужны итоги по ним.
Ничто, кроме select chervie, sum(total) from .. group by chervie это не вытянет с достаточной производительностью. Если суммировать на аппсервере - оно только фетчить-маршалить-десериализовать будет годами.

[identity profile] theiced.livejournal.com 2012-07-01 09:13 am (UTC)(link)
это исключение нужное очень редко. ну и любой орм это умеет автоматом энивэй.

[identity profile] metaclass.livejournal.com 2012-07-01 10:07 am (UTC)(link)
Какое редко? Ребе, у меня 99% опердени состоит из таких и более сложных запросов.

Другое дело, что логику оттуда надо действительно нахер выкинуть, но конкретно where/index by/group by надо выполнять в БД. А поскольку там все занормализовано - в эти выражения попадают поля из связанных таблиц и в итоге я в душе не ебу, как это написать на ORM так чтобы он сгенерировал нужный SQL запрос.

[identity profile] w00dy.livejournal.com 2012-07-01 10:17 am (UTC)(link)
Ну в чём пробелмы то. where генерится чрезе Where (), всякие group by - при выборке подчинёных объектов. Как генерить запросы - но вы ведь чем-то думали когда писали sql, вот аналогично и при написании кода, только у вас не таблица A и B, а объекты А и B и связи между ними. Всё просто.

[identity profile] metaclass.livejournal.com 2012-07-01 10:46 am (UTC)(link)
И работает только для MSSQL провайдера, только на с# и только в одной версии дотнета, да.

[identity profile] w00dy.livejournal.com 2012-07-01 10:53 am (UTC)(link)
Ну почему? Linq вроде как nHibernate поддерживает, есть провайдеры у DevExpress под кучу баз. Разботает на всём .net-овском есть. Запросы ведь не обязательно писать в этом sql-ном стиле. Можно и T ().Where (u => u.Id == userId).Select (u => u.Name).First ()

[identity profile] w00dy.livejournal.com 2012-07-01 09:39 am (UTC)(link)
Ну ребе, любой вменяемый орм позволяет дёрнуть sql напрямую, если сильно нужно конечно.

[identity profile] blackyblack.livejournal.com 2012-07-02 07:40 am (UTC)(link)
Логика не должна быть в базе, но как тупой сторэдж тоже не получится.

[identity profile] dair-spb.livejournal.com 2012-07-05 12:08 am (UTC)(link)
Я тут тебя, Андрей, наслушался, взял в руки рельсы.

Три дня (вечорами) пытался структуру БД изложить в модельках — хер там был.
Селект из двух таблиц со связкой в один запрос - тоже хер, хотя казалось бы. includes() генерит второй селект, where которого выглядит как id in (1,2,3,4,5,6,7,8.....)
Я преставил, что будет, если канал до БД не резиновый.

Но (но) веб на рельсах пишу, ничо так. Но БД — ну нахер, буду руками селекты писать.

[identity profile] tzirechnoy.livejournal.com 2012-07-02 05:53 am (UTC)(link)
Как раз реляцыонные понятия нужны в 95% случаев. Но иногда они обходятся слишком накладно по ресурсам, хотя и присутствует в абстрагировании предметной области (скидываем ещё 5%). Вот в этих 10% нужно обходится без реляцыонных понятий при программировании. Те пидоргюги, который городят корявый ORM там где он соответственно вреден -- должны сдохнуть и пр.

В остальных 5%, кстати -- мне, на самом деле, жаль что у нас так плохо с графовыми, деревянными, и в особенности с Hindley-Miller-типизированными ACID-базами. SQLю было бы значительно лучшэ, если бы те, кому нужно именно это, не занимались бы закатом солнца вручную.