metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2013-07-30 08:07 pm

Рельсы и констрейнты в БД

http://guides.rubyonrails.org/migrations.html#active-record-and-referential-integrity
"The Active Record way claims that intelligence belongs in your models, not in the database. As such, features such as triggers or foreign key constraints, which push some of that intelligence back into the database, are not heavily used."

В ActiveRecord червь не рекомендует делать констрейнты в БД. Это огорчение, т.к. например, я сломал к хуям (т.е. до невозможности вообще хоть что-либо сделать из UI) хипстерское веб-приложение одним SQL-запросом :)

[identity profile] juan-gandhi.livejournal.com 2013-07-30 05:12 pm (UTC)(link)
Да ну их нахуй.

[identity profile] vinslivins.livejournal.com 2013-07-30 06:18 pm (UTC)(link)
мы хорошие :)

[identity profile] sergiej.livejournal.com 2013-07-30 05:19 pm (UTC)(link)
С констрейнтами практически всегда больше проблем чем помощи. Если вдруг хочется оставить контроль базе, то потом блин всё равно позаботься завернуть вылетевший на базе констрейнт эксепшн в логику приложения, а это никак не меньше работы чем позаботиться о данных до попытки запихнуть их тупо.

[identity profile] bydlorus.livejournal.com 2013-07-30 05:35 pm (UTC)(link)
С обработкой ошибок всегда больше проблем чем помощи :-)

[identity profile] sergiej.livejournal.com 2013-07-30 05:38 pm (UTC)(link)
Ну можно конечно не обрабатывать, а тупо показать юзеру или бросить обратно по интерморде. Но не думаю что юзер будет доволен таким оборотом событий

(no subject)

[identity profile] bydl0coder.livejournal.com - 2013-07-30 17:41 (UTC) - Expand

(no subject)

[identity profile] sergiej.livejournal.com - 2013-07-30 17:51 (UTC) - Expand

(no subject)

[identity profile] bydlorus.livejournal.com - 2013-07-30 17:41 (UTC) - Expand

(no subject)

[identity profile] sergiej.livejournal.com - 2013-07-30 17:53 (UTC) - Expand

[identity profile] henu3detb.livejournal.com 2013-07-30 05:37 pm (UTC)(link)
Лучше пусть в продакшне будет необработанный эксепшн, чем неконсистентные данные, которые боком начнут вылазить через пол года на другой машине на другом континенте. Вот тогда будет точно ребус, откуда оно.

[identity profile] sergiej.livejournal.com 2013-07-30 05:41 pm (UTC)(link)
ну это самое то для бац-бац и в продакшн. Сначала расставляешь констрейнты, потом по факты их вылезания оборачиваешь в приложение. Тоже валидный подход для писателей на коленке.

(no subject)

[identity profile] bydlorus.livejournal.com - 2013-07-30 17:44 (UTC) - Expand

(no subject)

[identity profile] sergiej.livejournal.com - 2013-07-30 17:55 (UTC) - Expand

(no subject)

[identity profile] sergiej.livejournal.com - 2013-07-30 18:08 (UTC) - Expand

(no subject)

[identity profile] plumqqz.livejournal.com - 2013-07-30 20:56 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2013-07-30 18:06 (UTC) - Expand

(no subject)

[identity profile] sergiej.livejournal.com - 2013-07-30 18:19 (UTC) - Expand

(no subject)

[identity profile] bydlorus.livejournal.com - 2013-07-30 18:51 (UTC) - Expand

(no subject)

[identity profile] sergiej.livejournal.com - 2013-07-30 18:53 (UTC) - Expand

(no subject)

[identity profile] sergiej.livejournal.com - 2013-07-30 18:55 (UTC) - Expand

(no subject)

[identity profile] bydlorus.livejournal.com - 2013-07-30 18:58 (UTC) - Expand

(no subject)

[identity profile] sergiej.livejournal.com - 2013-07-30 19:03 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2013-07-30 19:05 (UTC) - Expand

(no subject)

[identity profile] sergiej.livejournal.com - 2013-07-30 19:06 (UTC) - Expand

(no subject)

[identity profile] henu3detb.livejournal.com - 2013-07-30 18:00 (UTC) - Expand

(no subject)

[identity profile] sergiej.livejournal.com - 2013-07-30 18:03 (UTC) - Expand

[identity profile] metaclass.livejournal.com 2013-07-30 05:37 pm (UTC)(link)
Констрейнты что до базы (в UI), что после базы обрабатываются достаточно однообразно, главное сунуть обработчик в точку через которую запросы ходят.
Зато при их наличии гарантированно, что внешние псы ходящие в базу, приложение не попортят.

[identity profile] sergiej.livejournal.com 2013-07-30 05:41 pm (UTC)(link)
" что внешние псы ходящие в базу, приложение не попортят."
Расстреливать сразу

(no subject)

[identity profile] bydlorus.livejournal.com - 2013-07-30 17:45 (UTC) - Expand

(no subject)

[identity profile] sergiej.livejournal.com - 2013-07-30 17:48 (UTC) - Expand

(no subject)

[identity profile] falcrum.livejournal.com - 2013-07-30 19:25 (UTC) - Expand

(no subject)

[identity profile] sergiej.livejournal.com - 2013-07-30 19:31 (UTC) - Expand

(no subject)

[identity profile] fraks-nsk.livejournal.com - 2013-07-31 09:40 (UTC) - Expand

(no subject)

[identity profile] sergiej.livejournal.com - 2013-07-31 09:44 (UTC) - Expand

[identity profile] zelanton.livejournal.com 2013-07-30 07:45 pm (UTC)(link)
А потом удаление записей превращается в ебанный секс, когда структура данных превращается в сеть, где объекты сами на себя ссылаются через 10 разных путей. И хуячь триггеры, процедуры, получай вендор лок. Особенно пиздато, когда в каком-нибудь оракле от всех этих триггеров и процедур приползают блокировки страниц или другое подобное веселье. Или тот же MSSQL с ограничением вложенности рекурсии.

Собственно целостность можно кодом контролировать, в.т.ч. отложено - искать и чистить битые связи. Главное в базу никого не пуcкать. Ну как вариант конечно, особенно когда за сроки мозг ебут, а это практически всегда.

(no subject)

[identity profile] metaclass.livejournal.com - 2013-07-30 19:53 (UTC) - Expand

(no subject)

[identity profile] zelanton.livejournal.com - 2013-07-30 20:02 (UTC) - Expand

(no subject)

[identity profile] fraks-nsk.livejournal.com - 2013-07-31 01:39 (UTC) - Expand

(no subject)

[identity profile] ext_1684112 - 2013-07-31 10:57 (UTC) - Expand

(no subject)

[identity profile] zelanton.livejournal.com - 2013-07-31 11:09 (UTC) - Expand

(no subject)

[identity profile] ext_1684112 - 2013-07-31 11:16 (UTC) - Expand

(no subject)

[identity profile] zelanton.livejournal.com - 2013-07-31 11:19 (UTC) - Expand

(no subject)

[identity profile] ext_1684112 - 2013-07-31 12:22 (UTC) - Expand

(no subject)

[identity profile] zelanton.livejournal.com - 2013-07-31 12:50 (UTC) - Expand

(no subject)

[identity profile] henu3detb.livejournal.com - 2013-07-30 19:53 (UTC) - Expand

(no subject)

[identity profile] zelanton.livejournal.com - 2013-07-30 19:59 (UTC) - Expand

(no subject)

[identity profile] fraks-nsk.livejournal.com - 2013-07-31 01:38 (UTC) - Expand

(no subject)

[identity profile] vp.livejournal.com - 2013-07-30 20:03 (UTC) - Expand

(no subject)

[identity profile] zelanton.livejournal.com - 2013-07-30 20:05 (UTC) - Expand

(no subject)

[identity profile] zelanton.livejournal.com - 2013-07-30 20:12 (UTC) - Expand

(no subject)

[identity profile] dennab.livejournal.com - 2013-07-31 14:00 (UTC) - Expand

(no subject)

[identity profile] zelanton.livejournal.com - 2013-07-31 19:18 (UTC) - Expand

[identity profile] bydl0coder.livejournal.com 2013-07-30 05:33 pm (UTC)(link)
Строчка осталась в доке с тех времен, когда из баз они один мускуль знали (можно blame посмотреть ради прикола). В нынешних и DSL для констрейнов в миграциях, само поднимется, откатится. Нефиг маны читать потому что, хуяк хуяк и в продакшен. Это тебя нанимают за 7 штук админку писать?

[identity profile] bydlorus.livejournal.com 2013-07-30 05:37 pm (UTC)(link)
> Нефиг маны читать потому что

Т.е. рельсы это таки говно?

(no subject)

[identity profile] bydl0coder.livejournal.com - 2013-07-30 17:37 (UTC) - Expand

(no subject)

[identity profile] bydlorus.livejournal.com - 2013-07-30 17:46 (UTC) - Expand

(no subject)

[identity profile] bydl0coder.livejournal.com - 2013-07-30 17:47 (UTC) - Expand

(no subject)

[identity profile] bydlorus.livejournal.com - 2013-07-30 17:49 (UTC) - Expand

(no subject)

[identity profile] sergiej.livejournal.com - 2013-07-30 18:21 (UTC) - Expand

[identity profile] metaclass.livejournal.com 2013-07-30 05:40 pm (UTC)(link)
Мозг мне ебать меня нанимают, судя по всему :)
Но я сначала пойду отдыхать, заебался.

[identity profile] bydl0coder.livejournal.com 2013-07-30 05:37 pm (UTC)(link)
Тьфу блин.
are not heavily used
Олег, залогиньтесь.

[personal profile] ex0_planet 2013-07-30 06:40 pm (UTC)(link)
я не олег, но здесь-то что не так?

[identity profile] vinslivins.livejournal.com 2013-07-30 06:19 pm (UTC)(link)
а можно спросить, каким образом был отправлен скл запрос не из моделей рельсов?

предполагается, что в базу данных лазют рельсы, и только рельсы.

если надо кому-то ещё - слава богу делать веб-сервисы можно практически генератором.

[identity profile] vinslivins.livejournal.com 2013-07-30 06:20 pm (UTC)(link)
ну или если запрос скл шлют рельсы, наверное он был заранее оттестирован в тестовой базе соответствующим тестом?

[identity profile] metaclass.livejournal.com 2013-07-30 06:28 pm (UTC)(link)
mysql -u hipsteruser -phipsterpassword
>insert into HipsterCustomers(name) values('testhipster');

все, приложение умирает на NULL/nil в одном из полей :)

(no subject)

[identity profile] vinslivins.livejournal.com - 2013-07-30 18:44 (UTC) - Expand

(no subject)

[personal profile] develop7 - 2013-07-30 22:02 (UTC) - Expand

(no subject)

[identity profile] theiced.livejournal.com - 2013-07-30 23:02 (UTC) - Expand

(no subject)

[identity profile] bydl0coder.livejournal.com - 2013-08-01 15:42 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2013-07-31 05:31 (UTC) - Expand

(no subject)

[identity profile] theiced.livejournal.com - 2013-07-31 06:24 (UTC) - Expand

(no subject)

[personal profile] develop7 - 2013-07-31 09:17 (UTC) - Expand

(no subject)

[personal profile] develop7 - 2013-07-31 09:37 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2013-07-31 10:46 (UTC) - Expand

(no subject)

[personal profile] develop7 - 2013-07-31 12:16 (UTC) - Expand

(no subject)

[identity profile] dennab.livejournal.com - 2013-07-31 14:02 (UTC) - Expand

Рельсы и констрейнты в БД

[identity profile] livejournal.livejournal.com 2013-07-30 09:38 pm (UTC)(link)
User [livejournal.com profile] insanegigolo referenced to your post from Рельсы и констрейнты в БД (http://insanegigolo.livejournal.com/89887.html) saying: [...] Оригинал взят у в Рельсы и констрейнты в БД [...]

Есенинское

[identity profile] livejournal.livejournal.com 2013-07-31 06:56 am (UTC)(link)
User [livejournal.com profile] plumqqz referenced to your post from Есенинское (http://plumqqz.livejournal.com/389428.html) saying: [...] рожье В овраг глухой. Пролей как масло Власа луны В мужичьи ясли Моей страны Срок ночи долог... [...]

[identity profile] theiced.livejournal.com 2013-08-01 09:16 pm (UTC)(link)
сожри ещё говна, уёбище

[identity profile] zealer.livejournal.com 2013-07-31 09:35 am (UTC)(link)
Это конечно неофициально, но с моей точки зрения - Рельсы предполагают, что на проекте будет DBA, который будет работать с базой на продакшене.
А в development/test режиме это не обязательно.

[identity profile] theiced.livejournal.com 2013-07-31 09:50 pm (UTC)(link)
нет, они как раз предполагают что дба не будет.

(no subject)

[identity profile] zealer.livejournal.com - 2013-08-01 11:11 (UTC) - Expand

(no subject)

[identity profile] theiced.livejournal.com - 2013-08-01 20:18 (UTC) - Expand

[identity profile] permea-kra.livejournal.com 2013-07-31 04:22 pm (UTC)(link)
Не является ли это поводом для посыла рельсов вхуй?

[identity profile] metaclass.livejournal.com 2013-07-31 05:04 pm (UTC)(link)
Наверно, нет. Расширения, умеющие в FK у них есть, рельсам второй эшелон обороны от тупизма никак не помешает, поэтому при желании можно сделать нормально.

(no subject)

[identity profile] theiced.livejournal.com - 2013-08-01 20:18 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2013-08-01 20:33 (UTC) - Expand