Per entrambi i casi di database. Utilizzerai le stesse strutture per più persone/prodotti, quindi ha senso. Inoltre ti permette di cambiare le cose senza riavviare il server.
L'ho gestito in questo modo in passato: Per le impostazioni specifiche per l'utente, ho creato un modello/tabella UserSettings, che ha un rapporto uno-a-uno con un utente. Il ragionamento per questo è che la maggior parte delle operazioni che coinvolgono gli utenti non richiedono che queste impostazioni vengano caricate, quindi sono incluse nei carichi utente dal database solo quando ne ho bisogno.
Quando faccio questo, di solito raggrupperò i nomi delle mie colonne, in modo che possa scrivere aiutanti che creano dinamicamente in base ai nomi. Ciò significa che non dovrò modificare le mie viste per incorporare nuove impostazioni a meno che non ne aggiunga una con uno schema di denominazione diverso.
Per le impostazioni specifiche di un prodotto, beh ciò dipende da come si stanno facendo le cose. E ci sono un paio di modi per interpretare la tua domanda.
Il modo in cui l'ho letto è che si desidera decidere a livello di prodotto. Quali impostazioni gli utenti possono ignorare o disabilitare le impostazioni di un utente. E possibilmente definire alcune impostazioni specifiche del prodotto.
Vorrei utilizzare un prodotto uno-a-molti per impostare la relazione. La tabella delle impostazioni sarebbe semplicistica (product_id, setting_name, setting_default_value, allow_user_change)
Questo fa un certo numero di cose. Ti consente di avere un elenco variabile di impostazioni per prodotti diversi (perfetto per il caso in cui stai offrendo molti prodotti diversi invece di vari livelli di accesso ai servizi). Permette anche di definire quali impostazioni un utente può/non può cambiare e fornire valori per quel tipo di prodotto. Questo può essere modificato da una vista amministratore senza riavviare l'applicazione. Inoltre, non è legato alle impostazioni dell'utente, al punto che se un utente non ha un'impostazione elencata in product_settings non ci saranno problemi.
Lo svantaggio è che si avranno più impostazioni comuni in questa tabella. Vorrei spostare le impostazioni che ogni prodotto avrà un valore diverso per un campo nella tabella del prodotto.
Sarà inoltre necessario scrivere convalide per garantire che un utente non modifichi un'impostazione il cui prodotto dice che non è possibile. Dovrai anche scrivere metodi di supporto per unire le impostazioni dal lato prodotto e utente.
Hai fatto tutti i tipi di ipotesi su ciò che sta pensando e su come ha intenzione di implementarlo, ma la sua vera domanda era "Qual è il modo migliore per memorizzare queste impostazioni?" Nessuna delle tue ipotesi ha alcun senso in quel contesto. Non penso che questo si qualifica come un "uomo di paglia", ma non sono sicuro di quale altro chiamarlo. –