Когда лучше хранить флаги в виде битовой маски, а не использовать ассоциативную таблицу?

Я работаю над приложением, в котором пользователи имеют разные разрешения для использования различных функций (например, Чтение, Создание, Загрузка, Печать, Утверждение и т. Д.). Список разрешений не будет часто меняться. У меня есть несколько вариантов сохранения этих разрешений в базе данных.

В каких случаях вариант 2 лучше?

Вариант 1

Использовать ассоциативную таблицу.

User
----
UserId (PK)
Name
Department
Permission
----
PermissionId (PK)
Name
User_Permission
----
UserId (FK)
PermissionId (FK)

Вариант 2

Сохранить битовая маска для каждого пользователя.

User
----
UserId (PK)
Name
Department
Permissions
[Flags]
enum Permissions {
    Read = 1,
    Create = 2,
    Download = 4,
    Print = 8,
    Approve = 16
}
75
задан Ryan Kohn 18 April 2011 в 20:04
поделиться