2015-09-30 11 views
2

Я использую Laravel и столкнулся с необходимостью иметь что-то вроде полиморфных отношений. Казалось бы, они решают именно то, что мне нужно, которое в двух словах может хранить разные данные на основе типа.Полиморфные отношения плохой практики?

Однако я знаю, что я не смогу использовать какие-либо ограничения, такие как внешние ключи. И я читал, что они по сути являются анти-шаблонами. Но мне было интересно, что другие думают об этом, и если кто-то использует их без проблем.

В противном случае, есть ли альтернативный способ, который я мог бы выполнить, какие полиморфные отношения обеспечивают, без фактического использования их? (Использование Laravel)

+0

@mjolnic - Принципы ACID связаны с транзакциями DB. Атомность, согласованность, изоляция, долговечность. Ничего общего с полиморфными отношениями. Я думаю, вы случайно использовали неправильный термин. – Gravy

+0

@Gravy Я согласен, возможно, не стоит упоминать ACID здесь (потому что, как вы упомянули, связано с транзакциями, а не с шаблонами разработки), я хотел сказать, что это может привести к проблемам с постоянством данных. – itsjavi

ответ

0

Полиморфные отношения - это анти-шаблон и нарушает принципы лучших практик в соответствии с мйолническим комментарием.

Сказав это, вы никогда не храните json в столбце BLOB или TEXT? Wordpress не хранит данные, сериализованные в mysql?

В реальном мире (за пределами университета) существует множество сценариев, где рекомендуется нарушать правила. В зависимости от вашего конкретного варианта использования может быть целесообразно их разбить.

простой блог пример. У вас есть сообщения, у вас есть страницы. Оба они нуждаются в том же табличном формате. Преимущества, полученные в результате полиморфных отношений, намного превосходят усилия, направленные на нормализацию, а также разработку и обслуживание при разделении содержимого на posts и pages.

Смежные вопросы