Рельсы и констрейнты в БД
Jul. 30th, 2013 08:07 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
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-запросом :)
"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-запросом :)
no subject
Date: 2013-07-30 05:19 pm (UTC)no subject
Date: 2013-07-30 05:35 pm (UTC)no subject
Date: 2013-07-30 05:38 pm (UTC)no subject
Date: 2013-07-30 05:41 pm (UTC)no subject
Date: 2013-07-30 05:51 pm (UTC)Постоянно сталкиваюсь с ситуацией, когла приложение "ожидало" что на базе будет констрейнт. Потом криворукие снимают консрейнт, потому что бизнес задолбал и "разрешил" дубли, потому что могут, а в приложение залезть не могут. Так что обработка консистентности данных на уровне приложения это ещё и буфер от хитрозадых бизнесов
no subject
Date: 2013-07-30 05:41 pm (UTC)Т.е. логика немного кривая. Забота о целостности данных должна быть везде. Если мы, конечно, говорим о referential integrity а не о проверке возвраста пользователя в триггерах.
no subject
Date: 2013-07-30 05:53 pm (UTC)no subject
Date: 2013-07-30 05:37 pm (UTC)no subject
Date: 2013-07-30 05:41 pm (UTC)no subject
Date: 2013-07-30 05:44 pm (UTC)no subject
Date: 2013-07-30 05:55 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2013-07-30 06:00 pm (UTC)no subject
Date: 2013-07-30 06:03 pm (UTC)no subject
Date: 2013-07-30 05:37 pm (UTC)Зато при их наличии гарантированно, что внешние псы ходящие в базу, приложение не попортят.
no subject
Date: 2013-07-30 05:41 pm (UTC)Расстреливать сразу
no subject
Date: 2013-07-30 05:45 pm (UTC)no subject
Date: 2013-07-30 05:48 pm (UTC)(no subject)
From:(no subject)
From:no subject
Date: 2013-07-31 09:40 am (UTC)no subject
Date: 2013-07-31 09:44 am (UTC)no subject
Date: 2013-07-30 07:45 pm (UTC)Собственно целостность можно кодом контролировать, в.т.ч. отложено - искать и чистить битые связи. Главное в базу никого не пуcкать. Ну как вариант конечно, особенно когда за сроки мозг ебут, а это практически всегда.
no subject
Date: 2013-07-30 07:53 pm (UTC)no subject
Date: 2013-07-30 08:02 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2013-07-30 07:53 pm (UTC)no subject
Date: 2013-07-30 07:59 pm (UTC)может например удалятся через настраиваемое время (n-лет) после пребывания в статусе "как бы удалено". Или вообще не удаляться. Это уж как юзеру угодно будет, схему жизненного цикла объекта пускай правит, где-то оно надо, где-то - мешает, по ситуации. Но вообще сама возможность удаления в ситуация когда связей уже пиздец сколько и oracle/mssql ебанётся на каком-нибудь случае.
(no subject)
From:no subject
Date: 2013-07-30 08:03 pm (UTC)А самого себя инстансов так 100 если, да все на одну базу?
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From: