Я работаю с приложением, которое использует битовые маски для хранения назначений ролей пользователей. Это боль в заднице. Если это делает меня предвзятым, виновным, как обвинение.
Если вы уже используете реляционную базу данных, это анти-паттерн, который нарушает большинство реляционных теорий и все правила нормализации. Когда вы создаете собственное хранилище данных, это может быть не такой уж плохой идеей.
Существует такая вещь, что объединяется слишком много таблиц, но реляционные базы данных созданы для этого. Многие из них имеют дополнительные функции, если производительность становится проблемой: индексы, индексированные представления и т. Д. Даже если искомые значения меняются не очень часто, что является преимуществом для Bitmask, накладные расходы на управление индексацией довольно легко в базе данных.
Хотя базы данных хорошо справляются с агрегацией данных, они могут стать вялыми, когда вы начнете вводить в наборы данных такие вещи, как сложные формулы или скалярные функции. Вы можете делать побитовое в своем приложении, но если все, что вы делаете, это получение связанных данных (поиск ролей пользователя), вы не пользуетесь преимуществами того, что лучше всего делает ваше хранилище данных.
Мой последний аргумент против этого будет простота для других разработчиков. У вас есть пользователи, роли и назначения. Это набор отношений «многие ко многим» (поскольку существует более одного отношения), который настолько распространен, что им легко управлять. Это просто CRUD материал.