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

[identity profile] bydlorus.livejournal.com 2013-07-30 05:44 pm (UTC)(link)
Вообще-то FK - это метаданные, которые зачастую сами по себе весьма полезны. По ним можно генерить всякую инфу. Например, я как-то писал прогу, которая из базы выдирает только данные, связанные с определённым проектом - от таблицы Projects по FK расходилась выборка нужного (анальные корпоративные правила не позволяли высылать всю базу).

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

[identity profile] Дмитрий Васильев (from livejournal.com) 2013-07-30 06:05 pm (UTC)(link)
Если правильно сделана система связывания по ФК, то всё будет ок без констрейнтов.

Боюсь, ваша система будет одним большим рейс кондишеном.
PS: разрешите полюбопытствовать - вы на джаве пишите?

[identity profile] sergiej.livejournal.com 2013-07-30 06:08 pm (UTC)(link)
"Боюсь, ваша система будет одним большим рейс кондишеном."
нет, не вся, а только подсистема, занимающаяся ORM и прочим адом.

Ну я лично давно почти не пишу, но писал на джаве, да, конечно кровавый энтерпрайз.

[identity profile] anonim-legion.livejournal.com 2013-07-30 07:08 pm (UTC)(link)
>ваша система будет одним большим рейс кондишеном.

Где же Крокодил, когда он так нужен? Тут ересь пишут, а карать некому.

[identity profile] plumqqz.livejournal.com 2013-07-30 08:56 pm (UTC)(link)
Неинтересно. Вы меня извините, но тащ явно совсем не понимает, зачем эти констрейны вообще нужны. Ну не понимает и не понимает, это его проблемы.

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

[identity profile] sergiej.livejournal.com 2013-07-30 06:19 pm (UTC)(link)
Ну если мы говорим о ФК, то вопрос связать два объекта в базе, когда может понадобиться констрейнт? Когда единственная валидная связь это один к одному. А почему он может понадобиться? Потому что кривые ручки создавая НОВЫЙ объект в "этой" таблице (где ФК) вместо того чтобы создать НОВЫЙ же объект в "чужой" таблице, взяли и зарелейтили на существующий, это конкретный фейл на уровне "наплевать на модель данных приложения", констрейнт тут чисто костыль.

[identity profile] bydlorus.livejournal.com 2013-07-30 06:51 pm (UTC)(link)
Вообще не въехал, почему это фк это один-к-одному?

[identity profile] sergiej.livejournal.com 2013-07-30 06:53 pm (UTC)(link)
хорошо, зачем тебе констрейнт на поле с ФК в таблице? Может это я не вьехал.

[identity profile] sergiej.livejournal.com 2013-07-30 06:55 pm (UTC)(link)
А блин я тупой
я про уникальный констрейнт с самого начала туплю. Сорри.

[identity profile] bydlorus.livejournal.com 2013-07-30 06:58 pm (UTC)(link)
А ну слава богу, а то беседа начала приобретать сюрреалистические черты ;-)

[identity profile] sergiej.livejournal.com 2013-07-30 07:03 pm (UTC)(link)
прошу прощения, само собой я ничего не имею против констрента на референс, даже если он обеспечен ORM с базой в сто раз удобнее работать даже просто "посмотреть" когда они расставлены.

[identity profile] metaclass.livejournal.com 2013-07-30 07:05 pm (UTC)(link)
Вот, а я было уже подумал, что мир псоглавцы захватили пока я спал :)

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

[identity profile] henu3detb.livejournal.com 2013-07-30 06:00 pm (UTC)(link)
Может оно и самое то, но для обычного вдумчивого подхода, для людей которые хотят выпускать стабильные приложения, констрейнты тоже подходят.

[identity profile] sergiej.livejournal.com 2013-07-30 06:03 pm (UTC)(link)
Ок, я соглашусь что умные констрейнты на технических ключах - хороший способ лишний раз прикрыть задницу. Я больше о констрейнтах на собственно данных.