Для обоих случаев БД. Вы собираетесь использовать одни и те же структуры для нескольких людей/продуктов, так что это имеет смысл. Также это позволяет вам что-то менять без перезапуска сервера.
В прошлом я справлялся с этим следующим образом: для настроек, специфичных для пользователя, я создал модель/таблицу UserSettings, которая имеет отношение «один к одному» с пользователем. Причина этого в том, что большинство моих операций с участием пользователей не требуют загрузки этих настроек, поэтому они включаются в пользовательские загрузки из базы данных только тогда, когда они мне нужны.
Когда я делаю это, я обычно группирую имена столбцов, чтобы я мог написать помощники, которые динамически создаются на основе имен. Это означает, что мне не придется изменять свои представления для включения новых параметров, если только я не добавлю представление с другой схемой именования.
Что касается настроек, специфичных для продукта, это зависит от того, как вы это делаете. И есть несколько способов интерпретировать ваш вопрос.
Насколько я понимаю, вы хотите выбрать уровень продукта. Какие настройки пользователи могут переопределять или отключать. И, возможно, определить некоторые настройки продукта.
Я бы использовал продукт «один ко многим» для установления отношений. Таблица настроек будет чем-то упрощенным (product_id, setting_name, setting_default_value, allow_user_change)
Это делает ряд вещей. Это позволяет вам иметь переменный список настроек для разных продуктов (идеально подходит для случая, когда вы предлагаете много разных продуктов вместо разных уровней доступа к услугам). Он также позволяет вам определить, какие настройки пользователь может/не может изменить, и указать значения для этого типа продукта. Это можно изменить в режиме администратора без перезапуска приложения. Он также не привязан к пользовательским настройкам, до такой степени, что если у пользователя нет настроек, перечисленных в product_settings, проблем не возникнет.
Недостатком является то, что в этой таблице будет несколько общих настроек. Я бы переместил настройки, согласно которым каждый продукт будет иметь другое значение, в поле в таблице продуктов.
Вам также придется написать проверки, чтобы гарантировать, что пользователь не изменит настройку, которую их продукт не может изменить. Вам также придется написать вспомогательные методы для объединения настроек со стороны продукта и пользователя.
person
EmFi
schedule
11.10.2009