Lavoro con un'applicazione che utilizza maschere di bit per archiviare le assegnazioni dei ruoli utente. È un dolore nel sedere. Se questo mi rende di parte, colpevole come accusato.
Se stai già utilizzando un database relazionale, è un anti-pattern che viola la maggior parte della teoria relazionale e tutte le regole di normalizzazione. Quando costruisci il tuo archivio dati, potrebbe non essere una cattiva idea.
Ci sono troppe tabelle che vengono unite, ma i database relazionali sono costruiti per gestirlo. Molti hanno funzionalità aggiuntive se le prestazioni diventano un problema: indici, viste indicizzate, ecc. Anche se i valori che stai guardando non cambiano molto spesso, il che è un vantaggio per Bitmask, l'overhead di dover gestire l'indicizzazione è abbastanza facile sul database.
Sebbene il database faccia un buon lavoro nell'aggregare i dati, può diventare lento quando si inizia a introdurre cose come formule complesse o funzioni scalari in serie di dati. Puoi eseguire il bit a bit nella tua app, ma se tutto ciò che stai facendo è ottenere dati correlati (cercando i ruoli di un utente), non stai sfruttando ciò che la tua archiviazione di dati fa meglio.
Il mio ultimo argomento contro sarebbe la semplicità per altri sviluppatori. Hai utenti, ruoli e incarichi. È un insieme di relazioni molti-a-molti (perché c'è più di una relazione) che è così comune, dovrebbe essere facile da gestire. Sono solo cose CRUD.