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

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

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

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

[identity profile] dair-spb.livejournal.com 2012-06-29 03:59 pm (UTC)(link)
О, мил человек, а расскажите мне, который кроме SQL ничего не знает — как на орме (абстрактном в вакууме) написать более-менее сложный селект? Ну там с вложенностью, аутер джойнами...

Вот пример из моего приложения, холст, масло C#, PostgreSQL:
SELECT Q.CYCLE_ID AS ID, C.KEY AS TICKER, C.NAME AS NAME, Q.PRICE AS QUOTE, Q.TRADE_LIMIT AS TRADE_LIMIT, Q.NPCS_BUY AS NPCS_BUY FROM STOCK_COMPANY C LEFT OUTER JOIN STOCK_QUOTE Q ON (C.KEY = Q.COMPANY_KEY AND Q.CYCLE_ID IN (SELECT MAX(ID) FROM STOCK_CYCLE))

[identity profile] dr-hyder.livejournal.com 2012-06-29 04:13 pm (UTC)(link)
Да примерно так же (http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html#queryhql-select). Нормальные люди пользуются ORM по назначению, как object-relational mapping, плюс как бонус простейшие запросы можно не писать а функции вызывать, я понимаю что там можно огород городить и извращаться, но если по хорошему SQL всё равно нужно знать.

[identity profile] w00dy.livejournal.com 2012-06-29 04:42 pm (UTC)(link)
да фиг его знает. орм требует другого подхода к снаряду, и просто так взять и переписать sql это не правильный вариант. Основное удобство orm в том что он даёт строгую типизацию при работе с базой. Меняется схема, правятся классы и дальше уже компилятор покажет где чего поламалось в коде.

[identity profile] tzirechnoy.livejournal.com 2012-06-29 08:19 pm (UTC)(link)
А, то есть Вы тожэ подтверждаете, что работать в рамках реляцыонной модэли через ORM невозможно. Ну да, ну да.

Внимание, вопрос: а нафига нужна реляцыонная база данных, если не работать с реляцыонной модэлью данных?

[identity profile] dr-hyder.livejournal.com 2012-06-29 08:31 pm (UTC)(link)
Ну вообще говоря реляционные базы данных очень часто используют просто как storage, все эти реляции им нафиг не упали, только мешают. Посмотрите на всё(ну хорошо, не на всё, но значительную часть) nosql движение, например. Люди наконец осознали что в принципе для их потребностей городить огороды не обязательно, достаточно документа со плавающей схемой на энтити, как в каком нибудь MongoDB и всё, реляционность, транзакции и прочие триггеры там не нужны. И ничо, работает, нормально.

Пытаться же из ORM выжать функциональность SQL, только в "удобном, обьектном" виде - это лучше себе сразу ногу прострелить, не мучица.

[identity profile] w00dy.livejournal.com 2012-06-29 08:36 pm (UTC)(link)
> Люди наконец осознали что в принципе для их потребностей городить огороды не обязательно

А до этого юзали мускль и не жужжали. Видать последник толи изговнился, толи стал толстым.

[identity profile] dr-hyder.livejournal.com 2012-06-29 08:41 pm (UTC)(link)
Мускль скейлить упаришься, а nosql решения легко, that's the point. То есть win-win такой, отказались от реляционности, асид послали в жопу и оказалось что скейлится всё куда проще(не то чтобы неожиданно оказалось, это я так шучу). Конечно и подход к сложным запросам пришлось поменять, никаких тебе волшебных group by, надо ручками map-reduce делать. Я вообще обожаю эту тему страшно, что SQL люблю, что nosql :)

[identity profile] tzirechnoy.livejournal.com 2012-06-29 08:55 pm (UTC)(link)
>Посмотрите на всё(ну хорошо, не на всё, но
>значительную часть) nosql движение,

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

[identity profile] dr-hyder.livejournal.com 2012-06-29 09:04 pm (UTC)(link)
Экий вы резкий!

[identity profile] si14.livejournal.com 2012-07-01 09:42 am (UTC)(link)
Ну, на самом деле, есть смысл в кауче/риаке. Причём первый можно, при желании, навелосипедить на втором. CRDT же. К Mongo сотоварищи это, конечно, не относится.

[identity profile] tzirechnoy.livejournal.com 2012-07-02 07:50 am (UTC)(link)
Я совершэнно не спорю, что во многих технологиях, которые называют "nosql", есть смысл. Я говорю, что нет смысла в слове "nosql".

[identity profile] si14.livejournal.com 2012-07-02 09:55 am (UTC)(link)
Угу, соглашусь.

[identity profile] si14.livejournal.com 2012-07-01 09:40 am (UTC)(link)
Нихера не работает. Не знаю ни одной приличной конторы, включая нашу, где использовался бы MongoDB и на него не ругались бы матом. Это пиздец чистейшей воды, прокатывает разве что для прототипа или для чего-нибудь, где мало кода и у базы один клиент. Как только в эту базу начинает ходить больше одного куска кода — можно закапывать, отсутствие схемы — постоянная проблема. «Ой, мы опечатались и записали вместо creation_time cretaion_time, тесты прошли, но почему-то на половине записей всё отваливается».

[identity profile] dr-hyder.livejournal.com 2012-07-01 11:47 am (UTC)(link)
Ну вообще говоря отсутствие схемы это фича, во многих местах очень полезная, практически незаменимая. Если вы хотите наоборот контроля за схемой(что ясное дело тоже обычный юзкейс) тогда она вам не очень подходит. Но есть ещё возможность не давать прямой доступ к схеме, а давать доступ только через сервис. Для RDBMS это менее полезно потому как там люди часто хотят делать всякие ad-hoc запросы, аггрегировать и вообще RDBMS людей несколько развратили подобными возможностями, до того что сложно представить как можно жить без них. Для монго это нормальная практика, дающая множество преимуществ(хотя конечно далеко не везде применимая). Но монго это не замена RDBMS, она для других целей. Если вам не подходит - неча на монго пенять.

[identity profile] w00dy.livejournal.com 2012-06-29 08:34 pm (UTC)(link)
Всё можно, если осторожно. Конкретно по запросу - нет контекста в котором он используется. А без контекста делать что-то безсмысленно.

А база нужна потому что на неё объектная модель красиво ложится. Между объектами ведь тоже есть отношения всякого рода и их нужно хранить и уметь выбирать.

[identity profile] avnik.livejournal.com 2012-06-29 06:06 pm (UTC)(link)

(Anonymous) 2012-06-30 08:10 pm (UTC)(link)
Вы не поверите. Я тут попал в МТС и ребята на слово ОРМ спрашивают что это такое. Кстати ребята сами по себе неплохие.

select(from=stock_company).left_join(key=company_key).in(top.max(id),where=stock_cycle)