Para ambos casos base de datos. Vas a utilizar las mismas estructuras para varias personas/productos, así que tiene sentido. También le permite cambiar cosas sin reiniciar el servidor.
Lo he manejado de esta manera en el pasado: Para configuraciones específicas para el usuario, he creado un modelo/tabla UserSettings, que tiene una relación uno a uno con un usuario. El razonamiento para esto es que la mayoría de mis operaciones que involucran usuarios no requieren que se carguen estas configuraciones, por lo que solo se incluyen en cargas de usuario de la base de datos cuando las necesito.
Cuando hago esto, por lo general, agruparé mis nombres de columna, de modo que pueda escribir ayudantes que creen dinámicamente en función de los nombres. Lo que significa que no tendré que modificar mis vistas para incorporar nuevas configuraciones a menos que agregue una con un esquema de nombres diferente.
Para la configuración específica de un producto, bueno, eso depende de cómo esté haciendo las cosas. Y hay un par de formas de interpretar tu pregunta.
La forma en que lo leo es que usted quiere decidir sobre un nivel de producto. Qué configuraciones los usuarios pueden anular o deshabilitar la configuración de un usuario. Y posiblemente defina algunas configuraciones específicas del producto.
Usaría un producto de uno a muchos para establecer la relación. La tabla de configuración sería algo simplista (product_id, setting_name, setting_default_value, allow_user_change)
Esto hace una serie de cosas. Le permite tener una lista variable de configuraciones para diferentes productos (perfecto para el caso en el que ofrece muchos productos diferentes en lugar de diferentes niveles de acceso a los servicios). También le permite definir qué configuraciones puede/no puede cambiar un usuario y dar valores para ese tipo de producto. Eso se puede cambiar desde una vista de administrador sin reiniciar la aplicación. Tampoco está vinculado a la configuración del usuario, hasta el punto de que si un usuario no tiene una configuración en la lista de productos, no habrá problemas.
Lo malo es que tendrá varias configuraciones comunes en esta tabla. Me gustaría mover la configuración de que cada producto tendrá un valor diferente a un campo en la tabla de productos.
También deberá escribir validaciones para asegurarse de que un usuario no cambie una configuración que su producto dice que no puede. También deberá escribir métodos de ayuda para fusionar las configuraciones del producto y del lado del usuario.
Has hecho todo tipo de suposiciones sobre lo que está pensando y cómo va a implementar esto, pero su pregunta real fue "¿Cuál es la mejor manera de almacenar estas configuraciones?" Ninguna de sus suposiciones tiene sentido dentro de ese contexto. No creo que esto califique como un "hombre de paja", pero no estoy seguro de qué más llamarlo. –