Как управлять настраиваемыми полями для конкретных клиентов (брендинг)
Мы разрабатываем корпоративное приложение, которое предоставляет облачные сервисы хранения для своих клиентов (через Software As A Service). Некоторые из наших клиентов хотят отслеживать пользователей, приходящих со своего веб-портала (целевой страницы), добавляя некоторые настраиваемые поля, специфичные для этого клиента (например, тип лицензии, ключ, серийный номер и т. Д.). На данный момент у нас есть только один клиент, который использует наше приложение и предоставляет услуги своим конечным пользователям, но мы ведем переговоры с новым клиентом, который также будет использовать наш сервис в ближайшем будущем.
На данный момент у нас есть таблица реляционной базы данных (MySql), специфичная для этого первого клиента, которую мы используем для обработки пользовательских полей этого клиента, и мы не хотим создавать таблицы, специфичные для пользовательских полей нового клиента, поскольку для этого потребуется изменить схема базы данных каждый раз, когда мы добавляем нового клиента в наше приложение.
Наше исследование показало, что есть несколько методов, которые мы могли бы использовать для нашей реляционной базы данных, чтобы решить нашу проблему. Они (Источник: http://www.percona.com/live/mysql-conference-2013/sites/default/files/slides/Extensible%20Data%20Modeling.pdf):
- Добавление дополнительных столбцов (в таблице пользовательских полей)
- Сущность - Атрибут - Модель стоимости
- Модель наследования таблиц классов
- Сериализованные LOB и инвертированные индексы
Наш вопрос: как зрелые компании (в частности, Salesforce, NetSuite и т. Д.) Хранят пользовательские поля в базе данных архитектурно и как мы должны их хранить?
Любая помощь / указатели в правильном направлении будут полезны. Благодарю.