Я работаю в SaaS, где любой арендатор может иметь несколько списков контактов, каждый список может иметь любое количество настраиваемых полей, которые могут хранить контакты в этом списке, и любое количество групп, которые могут быть включены в список (группы используются для сегментирования контактов из списка).У каждого контакта есть одно обязательное поле: адрес электронной почты и любое количество пользовательских полей, которые определены для списка, где он, как я уже упоминал.Мы должны быть в состоянии найти контакты из списков на основе групп, в которых они находятся, и значений пользовательских значений.Мы должны предоставить до 30 пользовательских полей.Теперь я вижу три способа решения этой проблемы:
Использование вида EAV (мы пытаемся сделать это так), но это выглядит довольно сложно.У нас есть таблица списков (списки арендаторов), связанные таблицы custom_fields, связанные таблицы подписчиков, в которых хранятся email_addreses подписчиков списка, таблица subs_custom_data, которая связана с таблицами подписчиков и custom_fields (сохраняются значения пользовательских полей подписчиков).
Шаблон таблицы полей.Его описание здесь http://blog.springsource.com/arjen/archives/2008/01/24/storing-custom-fields-in-the-database/. В этом случае мы будем использовать поле, связанное с настраиваемыми полями, которое будет хранить в столбцах все настраиваемые поля, например, иметь 30 столбцов для хранения значений каждого из возможных настраиваемых полей и таблицу.в котором хранится отображение имени столбца и имени определенного пользователем поля.Это выглядит сложным тоже.У нас должно быть как минимум 30 индексов для поиска по значениям настраиваемых полей, есть и другие проблемы:
Чтобы использовать какую-либо базу данных NoSQL, по крайней мере, для храненияпользовательские поля и, возможно, группы из списка.Как вы думаете, такие базы данных могут помочь здесь, и если да, то как спроектировать для хранения пользовательских полей и групп.Я пытаюсь взглянуть на разные типы NoSQL, например, на документы, ориентированные на MongoDb, но сразу не понимаю, как это может помочь решить эту проблему.Здесь мы можем хранить произвольные атрибуты, но для поиска значений настраиваемых полей нам нужно заранее их проиндексировать, чтобы мы знали, какие настраиваемые поля у нас будут.
Спасибоза любую информацию об этом.