Как реализовать определяемые пользователем поля и группировку для мультитенантного приложения: EAV, шаблон фиксированных таблиц, NoSQL

I ' У каждого контакта есть одно обязательное поле: email_address и любое количество полей, определенных пользователем, которые определены для списка, о котором я упоминал. Мы должны иметь возможность находить контакты в списках на основе групп, в которых они находятся, и значений, определенных пользователем. Мы должны предоставить до 30 пользовательских полей. Я вижу сейчас три способа решения этой проблемы:

  1. Использование типа EAV (мы пытаемся сделать это так), но это выглядит довольно сложно. У нас есть таблицы списков (списки арендаторов), связанные таблицы custom_fields, связанные таблицы подписчиков, в которых хранятся email_addreses подписчиков списка, таблица subscribers_custom_data, связанная с подписчиками и таблицы custom_fields (сохраненные значения настраиваемых полей подписчиков).

  2. Шаблон таблиц полей. Его описания находятся здесь http://blog.springsource.com/arjen/archives/2008/01/24/storing-custom-fields-in-the-database/ . В этом случае мы использовали бы поле, связанное с настраиваемыми полями, которое будет хранить в столбцах все настраиваемые поля, например, имеет 30 столбцов для хранения значений всех возможных настраиваемых полей и таблицу, в которой хранится сопоставление имени столбца и имени, определенного пользователем. поле. Это тоже выглядит сложно. У нас должно быть не менее 30 индексов, по крайней мере, для поиска по значениям настраиваемых полей, есть и другие проблемы,

  3. Чтобы использовать какую-то базу данных NoSQL хотя бы для хранения пользовательских полей и, возможно, групп списка . Как вы думаете, могут ли здесь помочь такие базы данных, и если да, то как спроектировать для хранения настраиваемых полей и групп. Я пытаюсь посмотреть на разные типы NoSQL, например, на документ, ориентированный как MongoDb, но сразу не понимаю, как это может помочь решить эту проблему. Мы можем хранить здесь произвольные атрибуты, но для поиска значений настраиваемых полей нам необходимо их проиндексировать заранее, поэтому мы должны знать, какие настраиваемые поля у нас будут.

Спасибо за любую информацию об этом.

11
задан James Jithin 28 January 2012 в 11:06
поделиться