M2M VS List что выбрать?

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

Привет!

Преимущества M2M таблицы
а) Фильтрация по dot-walking полям в M2M легче, например, "покажи мне все записи M2M, где “сущность, похожая на компанию”.Active = false, c List полем придется пробегаться по всем значениям массива в поле, тоже быстро, но придется поскриптовать
б) Загрузка данных через Import Set легче в M2M таблицу - смапил поля и готово

Недостатки M2M таблицы
Нужно создать пару бизнес-правил, чтобы не допустить полные дубликаты (пользователь - “сущность, похожая на компанию”) в M2M таблице, но это работа на полчаса.

Преимущества List поля
а) Быстрая реализация и визуально понятно конечному пользователю, но про репортинг и фильтрацию по значениям этого поля придется либо забыть, либо скриптовать
б) Через UI туда невозможно добавть дважды одну и ту же сущность.
в) Можно бизнес-правилом или клиентским скриптом анализировать изменения (что удалили или что добавили или и добавили, и удалили), если изменения поля идут через UI и принимать какие-то решения. Это редкий случай.

Лично я бы пошел через List поле, если априори не нужно репортить по данным из этого поля или как-то его мейнтейнить, то есть поле хранит какие-то данные, по которым нет фильтрации или репортига.

Гибрид
Можно пойти по гибридному пути - мейнтенить (создавать, изменять, удалять) записи в M2M таблице, а для визуализации (если по какой-то причине связанный список не катит) собирать List поле из M2M записей с помощью onInsert, onUpdate, onDelete бизнес-правил на M2M таблице. Реальных причин это делать нет. На худой конец можно пойти по M2M пути и визуализировать записи M2M на форме пользователя через красивенький виджет.

С уважением,
Никита

3 лайка