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

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

[identity profile] metaclass.livejournal.com 2013-07-30 07:53 pm (UTC)(link)
Рекурсивные зависимости в базе?

[identity profile] zelanton.livejournal.com 2013-07-30 08:02 pm (UTC)(link)
ну. Кстати у FB с этим беда (многие триггеры не тупо создаются, уж не помню с какими формулировками). Если я ничего не путаю, а могу, т.к. натрахавшись с триггерами я на них уже забил и делаю кодом - в каждой СУБД свои уникальные грабли, превращающие кросплатформенную работу с тригерамми в кромешный адъ. Только код, а заодно никакого вендор-лока. Но там свои грабли)

[identity profile] fraks-nsk.livejournal.com 2013-07-31 01:39 am (UTC)(link)
Триггеры создаются "не тупо"? А надо что бы было "тупо"?

[identity profile] ext_1684112 (from livejournal.com) 2013-07-31 10:57 am (UTC)(link)
А не надо использовать FB.

[identity profile] zelanton.livejournal.com 2013-07-31 11:09 am (UTC)(link)
Не надо в новом. А вот поддержка старого никуда не денется, благо это не стиль "втюхал и забыл"

[identity profile] ext_1684112 (from livejournal.com) 2013-07-31 11:16 am (UTC)(link)
> это не стиль
Так делать тоже не надо. Делать исключения только за очень большие деньги.

[identity profile] zelanton.livejournal.com 2013-07-31 11:19 am (UTC)(link)
Как делать не надо? Поддерживать старые внедрения не надо? Новомодный стиль "продали, а там хоть потоп"?

[identity profile] ext_1684112 (from livejournal.com) 2013-07-31 12:22 pm (UTC)(link)
>Новомодный стиль

Что это он новомодный. Очень даже старый.

[identity profile] zelanton.livejournal.com 2013-07-31 12:50 pm (UTC)(link)
хуяк-хуяк, в продакшен и забыть)

[identity profile] henu3detb.livejournal.com 2013-07-30 07:53 pm (UTC)(link)
А вот не надо ничего удалять )

[identity profile] zelanton.livejournal.com 2013-07-30 07:59 pm (UTC)(link)
Лопнет

может например удалятся через настраиваемое время (n-лет) после пребывания в статусе "как бы удалено". Или вообще не удаляться. Это уж как юзеру угодно будет, схему жизненного цикла объекта пускай правит, где-то оно надо, где-то - мешает, по ситуации. Но вообще сама возможность удаления в ситуация когда связей уже пиздец сколько и oracle/mssql ебанётся на каком-нибудь случае.

[identity profile] fraks-nsk.livejournal.com 2013-07-31 01:38 am (UTC)(link)
Если закладывается такой функционал "удалять через N лет" то нет никаких проблем в рамках этого функционала реализовать корректное удаление, с учетом связей. Зато корректность и целостность гарантирована.

[identity profile] vp.livejournal.com 2013-07-30 08:03 pm (UTC)(link)
"никого в базу не пускать"

А самого себя инстансов так 100 если, да все на одну базу?

[identity profile] zelanton.livejournal.com 2013-07-30 08:05 pm (UTC)(link)
чёй-та я не понял твоего французкого.
"самого себя инстансов" - это ты сессии что-ли так обозвал? Или шо? А что, у вас кол-во подключений чем-то лимитировано, после цифры 20 например перестаёт работать? Или откуда такие вопросы?

[identity profile] zelanton.livejournal.com 2013-07-30 08:12 pm (UTC)(link)
если инстансы БД, то я тоже не догоняю откуда подобный вопрос и какое оно имеет отношение к сказанному.

[identity profile] dennab.livejournal.com 2013-07-31 02:00 pm (UTC)(link)
Завернуть базу в какой-нить один интерфейс не?

[identity profile] zelanton.livejournal.com 2013-07-31 07:18 pm (UTC)(link)
ORM же + многозвенка, я ядром и развитым API для работы извне.
Заодно снимается необходимость требовать много всяких ненужных BDA длябы оно работало.
А то сначала напишут софт который для маломальско-нормальной работы требует сотню крокодилов, а потом пишут постики про то, что крокодилы у клиентов некачественные.