Недостатки моделирования ролей в виде логических столбцов на пользовательской таблице
Я работаю над приложением Rails, использующим CanCan для RBAC, и у меня есть только 3 роли, и, возможно, я добавлю еще 1 или 2 в будущем.
В прошлом у меня всегда были роли как их собственная сущность, присоединенная к пользователям через таблицу ссылок m2m. С таким небольшим количеством статичных ролей это кажется излишним. Поэтому я думаю просто добавить логические столбцы в мою таблицу Users для каждой роли. Я также мог бы использовать битовую маску (как в примере с CanCan), но я не слишком заинтересован в хранении нескольких значений в одном столбце.
Поэтому мой вопрос: что лучше всего делать в этой ситуации: битовые маски, несколько логических столбцов или правильно нормализованные отношения m2m?
1 ответ
Работа по принципу YAGNI повлияла на мое решение использовать отдельные битовые столбцы для каждой роли. Даже если вы добавите еще пару столбцов с течением времени, им все же будет легче управлять, чем таблицей ссылок m2m. Я полностью согласен с тем, что не использую битовые маски, поскольку они скрывают значение данных.
Я обращаюсь к этому только со стороны SQL, поскольку у меня нет опыта работы с Rails, CanCan или RBAC.