Ich arbeite mit einer Anwendung, die Bitmasken zum Speichern von Benutzerrollenzuweisungen verwendet. Es ist ein Schmerz im Hintern. Wenn das mich voreingenommen macht, schuldig wie angeklagt.
Wenn Sie bereits eine relationale Datenbank verwenden, ist dies ein Anti-Pattern, das gegen die meisten relationalen Theorien und alle Normalisierungsregeln verstößt. Wenn Sie Ihren eigenen Datenspeicher erstellen, ist dies möglicherweise keine so schlechte Idee.
Es werden zu viele Tabellen verknüpft, aber dafür werden relationale Datenbanken erstellt. Viele haben zusätzliche Funktionen, wenn die Leistung zu einem Problem wird: Indizes, indizierte Ansichten usw. Auch wenn sich die Werte, nach denen Sie suchen, nicht sehr oft ändern, was für Bitmask von Vorteil ist, ist der Mehraufwand für die Verwaltung der Indizierung ziemlich einfach in der Datenbank.
Obwohl die Datenbank Daten gut aggregiert, kann es zu Verzögerungen kommen, wenn Sie beispielsweise komplexe Formeln oder Skalarfunktionen in Datasets einfügen. Sie können das bitweise in Ihrer App tun, aber wenn Sie nur verwandte Daten abrufen (die Rolle (n) eines Benutzers nachschlagen), können Sie nicht ausnutzen, was Ihre Datenspeicherung am besten kann.
Mein letztes Argument dagegen wäre die Einfachheit für andere Entwickler. Sie haben Benutzer, Rollen und Zuordnungen. Es ist eine Menge von vielen Beziehungen (da es mehr als eine Beziehung gibt), die so häufig vorkommt, dass sie einfach zu verwalten sein sollte. Es ist nur CRUD Zeug.