
Denis
30.06.2017
14:52:15

Pavel
30.06.2017
14:52:17
Сейчас я иногда пишу сложные запросы голые, но когда речь идето простой выборке по условию с парой джоинов, то всегда через ActiveRecord выбираю

Denis
30.06.2017
14:52:36

Pavel
30.06.2017
14:52:55
Там под ним слой DAO который делает prepare

Google

Pavel
30.06.2017
14:53:14
А чуть выше слой который выбирает под какую БД загрузить драйвер.

Denis
30.06.2017
14:53:35
а как оно определяет когда PREPARE нужен а когда нет?

Pavel
30.06.2017
14:54:51

Anatoly
30.06.2017
14:55:16
Я надеюсь, что через 10 лет профессия SQL-кодер просто вымрет

Pavel
30.06.2017
14:55:29
Я SQL-кодера за 9 лет карьеры ни разу не встречал :)

Denis
30.06.2017
14:55:42

Dmitry
30.06.2017
14:55:43
@ttldtor а как проблему будут решать?

Denis
30.06.2017
14:55:57
Вижу тут полное непонимание сути работы с БД, граждане

Pavel
30.06.2017
14:56:48
Смотря где работать
Вот тут мы и подходим к самой сути спора :) Ты своим утверждением что ORM не нужно взял и отмел весь малый да и средний бизнес, оставив только технологических гигантов. Не надо так.

Denis
30.06.2017
14:57:20
Имел сложную схему БД трудясь в мелком бизнесе

Google

Anatoly
30.06.2017
14:57:51

Pavel
30.06.2017
14:57:54
Ну а где есть SQL кодеры то? Мне кажется это только кровавый энтерпрайз.
Или хайлоад, вот там ORM плохо живет.

Anatoly
30.06.2017
14:58:22
норм живёт

Denis
30.06.2017
14:58:32
Орм не нужно потому что это как кодить с goto - можно, но если проект вырастет то будет ад

Anatoly
30.06.2017
14:58:48
ты вообще какие ORM тыкал?)

Denis
30.06.2017
14:59:16

Dmitry
30.06.2017
14:59:19
Павел, в некоторых конторах есть. Приятель в Транснефти работает. Там у них отдельный человек который разные запросы и процедуры пишет

Denis
30.06.2017
15:00:03

Pavel
30.06.2017
15:00:40
Вот уж где ад, так это в компаниях вроде транснефти. Где требования настолько дурацкие и бизнесу настолько наплевать на архитектуру, что у них там сидит отдельный программист и программирует километровые запросы.

Anatoly
30.06.2017
15:01:28

Denis
30.06.2017
15:01:46

Dmitry
30.06.2017
15:01:59
ну там на самом деле куча народу говнокодит пиздец как. переменные транслитом и хардкод параметров в коде это еще цветочки

Denis
30.06.2017
15:02:14

Pavel
30.06.2017
15:02:34
Там описан идеологический случай :)
Но по такой же логике ты должен прочитать вот эту статью https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0_%D0%BE%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B8
и уйти из программирования вообще, потому что невозможно остановить зависшую программу.

Denis
30.06.2017
15:03:44
Я ж практик
А не теоретик
Сконструировать сложный select красиво в ООП нереально
А тратить время на Орм из за простых нет смысла

Google

Pavel
30.06.2017
15:05:31
Ну и что? Для таких случаев всегда в ОРМах предусмотрен метод для вызова голого запроса.

Dmitry
30.06.2017
15:05:33
А в не-ООП языках?

Pavel
30.06.2017
15:06:15

Denis
30.06.2017
15:06:15

Pavel
30.06.2017
15:08:13
Вот простой пример: юзер хочет в базе искать машины. Иногда он хочет искать по цвету, иногда по цене, а иногда по цвету и по цене. Как это решается голым запросом?
У него в интерфейсе 3 поля - название марки, цвет машины и цена. Иногда он не заполняет 1-2 поля и тогда этот критерий учитывать не нужно.

Denis
30.06.2017
15:08:54
Условным select
Case when then в условии выборки по каждому полю
Если кратко

Pavel
30.06.2017
15:11:13
То есть ты не считаешь это говнокодом? Такой запрос будет выполняться дольше чем динамически собранный

Denis
30.06.2017
15:11:25

Pavel
30.06.2017
15:13:41
Да это пример простейший, там не должно быть сложных запросов

Denis
30.06.2017
15:14:24
Запрос не сложный, условие сложнее "обычного". На скорость это точно не повлияет

Pavel
30.06.2017
15:15:30
Другой кейс - у тебя в большой системе есть кучи запросов к автомобилям разные. И в один прекрасный день тебе понадобилось реализовать soft deletable, то есть добавить поле is_deleted BOOL, и везде выбирать только WHERE is_deleted = false В ORM это делается изменением в одном месте модели.

Denis
30.06.2017
15:16:21
А в БД в 2 местах, но без участия ди кодера вообще
Тебе даже ничего не скажут

Pavel
30.06.2017
15:16:38
Причем оно автоматически будет придумывать алиасы в сложных джоинах и следить за тем чтобы не было конфликтов алиасов.

Google

Pavel
30.06.2017
15:17:27

Denis
30.06.2017
15:18:21
Поэтому в 2 местах. Всякие такие флажки это вообще внутренние детали схемы, прикладным кодерам их знать не надо

Pavel
30.06.2017
15:18:45
Надо, они же бизенс логику реализуют
Таких флажков может быть десяток, всякие колонки статуса и т.д.

Denis
30.06.2017
15:19:24

Pavel
30.06.2017
15:19:47
soft deletable это абсолютно реальный паттерн который много где реализуется.

Denis
30.06.2017
15:19:53
Я сторонник бизнес логику в БД прятать вообще.

Pavel
30.06.2017
15:20:44
Возможность потом возвращать случайно удаленные объекты. И просто удалять объекты без нарушения консистентности статистики например.

Denis
30.06.2017
15:21:12

Admin
ERROR: S client not available

Pavel
30.06.2017
15:21:30
Как он тогда будет влиять на то учитывать ему флаг или нет?
Это очень частый кейс

Denis
30.06.2017
15:22:04
Никак - ему отдадут данные уже с учётом этих флагов

Pavel
30.06.2017
15:22:15
Он же должен как-то управлять этим

Denis
30.06.2017
15:22:37
Где должен там у него возьмут этот флаг.

Pavel
30.06.2017
15:22:57
В интернет магазине - товары, пользователи. На форуме - посты и т.д. В образовательной системе - курсы, вузы, расписание, да что угодно. Все это может быть удалено, причем почти никогда нельзя это удалять насовсем.

Denis
30.06.2017
15:23:47

Pavel
30.06.2017
15:24:13
Нет денег ни на каких ди кодеров :)
Точнее на кодеров базы

Google

Pavel
30.06.2017
15:24:33
В маленьком стартапчике точно не будет.

Denis
30.06.2017
15:25:09
А изучить - зашквар? )

Pavel
30.06.2017
15:25:15
Максимум это 1 фронтенд, который делает верстку и JS пишет, и 1 бэкенд который пишет логику и управляет базой и серверами.
А что изучать? Писать голые запросы тупо дольше и в них потом разбираться сложнее. Когда пойдет поток правок и все условия надо будет менять.

Denis
30.06.2017
15:25:52
Как в резюме sql вписать так у всех, а как реально базу проектировать так Орм и тайные знания кодера 3в1

Pavel
30.06.2017
15:26:55
Ну sql на средне-глубоком уровне бэкендер и так знает. Но знание SQL тебе не даст скорости при переписывании сотен запросов на новую логику.

Denis
30.06.2017
15:26:57
Мне пофиг но если проект вырастет то его придётся выкинуть и переписать с нуля.
Потому что реализация скрыта будет в БД. А данные так и так придётся переносить, так что лучше совместить

Pavel
30.06.2017
15:28:11

Denis
30.06.2017
15:28:47

Pavel
30.06.2017
15:29:00
Вначале денег ни у кого нету
Математическое ожидание от того что качественный код даст проекту взлететь - весьма мало. Поэтому обычно пишут кое как, а потом когда пришел успех то уже нанимают SQL кодеров которые сидят и фултайм оптимизируют запросы.
Но это увы происходит в лучшем случае с 1% проектов.

Denis
30.06.2017
15:30:00

Pavel
30.06.2017
15:30:50
Ну бывает. Тогда может стоит подумать и отказаться от ОРМ, но это не абсолют :)
Вообще ОРМ очень большой процент потребностей покрывает, и если схема реально сложная и он не применим то это вообще повод задуматься, а умеет ли проектировщик проектировать схему и правильно ли он понимает бизнес-задачи )

Denis
30.06.2017
15:35:10
Схема всегда сложная. Если она простая юзайте... Эксель)
Короче нефиг прикладными руками в БД лазать)

Pavel
30.06.2017
15:38:52
жизнь показывает другое )

qwerty
30.06.2017
16:10:46