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] 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 в одном из полей :)

[identity profile] vinslivins.livejournal.com 2013-07-30 06:44 pm (UTC)(link)
[13] pry(main)> Url.create!
(0.2ms) BEGIN
Resource Exists (0.6ms) SELECT 1 AS one FROM `resources` WHERE `resources`.`uuid` IS NULL LIMIT 1
(0.1ms) ROLLBACK
ActiveRecord::RecordInvalid: Validation failed: Resource uuid can't be blank, Url can't be blank
from /home/v/.rvm/gems/ruby-1.9.3-p448/gems/pry-exception_explorer-0.1.9/lib/pry-exception_explorer/core_ext.rb:46:in `raise'
[14] pry(main)>

(опа, приложение живёт =)
develop7: (dero)

[personal profile] develop7 2013-07-30 10:02 pm (UTC)(link)
а ещё если БД приложения удалить, то тупые хипстерские рельсы её обратно не поднимают, представляешь?
Edited 2013-07-30 22:02 (UTC)

[identity profile] theiced.livejournal.com 2013-07-30 11:02 pm (UTC)(link)
я ему тоже самое сказал ;]

>[1:45:34 PM] Andrew Kirilenko: если крокодила пустить
>[1:45:39 PM] Andrew Kirilenko: то он и drop database сделает
>[1:46:15 PM] Andrew Kirilenko: ну вообще тут тоже самое что и динамической типизацией
>[1:46:21 PM] Andrew Kirilenko: надо чернягу не творить явную
>[1:46:26 PM] Andrew Kirilenko: и всё будет работать заебис

[identity profile] bydl0coder.livejournal.com 2013-08-01 03:42 pm (UTC)(link)
Дропнет, и напишет, что все надо делать на перле.

[identity profile] metaclass.livejournal.com 2013-07-31 05:31 am (UTC)(link)
А вот например, пользователю на уровне БД можно дать права только на Insert и только в одну таблицу. Без всяких "удалить базу" и прочего там.
develop7: (dero)

[personal profile] develop7 2013-07-31 09:17 am (UTC)(link)
Я когда-то баловался, ещё на пхп. В итоге оказалось удобнее реализовывать ограничения в приложении — и гибче, и проще деплоить, и проще допиливать.
develop7: (dero)

[personal profile] develop7 2013-07-31 09:37 am (UTC)(link)
Вообще это всё имело бы смысл обсуждать, если бы юзеры вашего приложения работали с БД из SQL-клиента, а не из веб- или десктоп-морды.
Edited 2013-07-31 10:08 (UTC)

[identity profile] metaclass.livejournal.com 2013-07-31 10:46 am (UTC)(link)
Вообще, десктоп-морда у меня - это SQL-клиент, только облагороженный до состояния "может пользоваться любой человек".
develop7: (dero)

[personal profile] develop7 2013-07-31 12:16 pm (UTC)(link)
таки у ваших юзеров аутентификация сервером БД? тогда да, иначе чем GRANTом, будет очень сложно.

[identity profile] dennab.livejournal.com 2013-07-31 02:02 pm (UTC)(link)
Читер!