Se un utente può avere più ruoli, probabilmente è meglio avere un user_role
tabella che memorizza queste informazioni. È normalizzato e sarà molto più facile interrogarlo.
Una tabella come:
user_id | role
--------+-----------------
1 | Admin
2 | User
2 | Admin
3 | User
3 | Author
Ti consentirà di eseguire query per tutti gli utenti con un ruolo particolare, come SELECT user_id, user.name FROM user_role JOIN user WHERE role='Admin'
piuttosto che dover utilizzare l'analisi delle stringhe per ottenere i dettagli da una colonna.
Tra le altre cose, questo sarà più veloce, poiché potrai indicizzare le colonne correttamente e occuperà leggermente più spazio di qualsiasi soluzione che metta più valori in una singola colonna, il che è antitetico a ciò per cui sono progettati i database relazionali.
Il motivo per cui non dovrebbe essere archiviato è che è inefficiente, per il motivo per cui DCoder afferma nel commenta a questa risposta . Per verificare se un utente ha un ruolo, sarà necessario scansionare ogni riga della tabella utente, quindi la colonna "ruoli" dovrà essere scansionata utilizzando la corrispondenza delle stringhe - indipendentemente da come questa azione è esposta, l'RMDBS dovrà eseguire operazioni sulle stringhe per analizzare il contenuto. Si tratta di operazioni molto costose e per nulla di buona progettazione del database.
Se hai necessità per avere un'unica colonna, suggerirei caldamente che non hai più un problema tecnico, ma di gestione del personale . L'aggiunta di tabelle aggiuntive a un database esistente in fase di sviluppo non dovrebbe essere difficile. Se questo non è qualcosa che sei autorizzato a fare, spiega perché la tabella extra è necessaria alla persona giusta, perché mangiando più valori in una singola colonna è un cattivo, cattivo idea .