Это классическая модель «Роль пользователя-группы». Это троичные отношения. User-Group - это многие ко многим; так же как и групповая роль. Вам понадобится пять таблиц, чтобы захватить все это.
Вы начнете с таблицы пользователей. У него будет первичный ключ (конечно). То же самое с группой и ролью.
У вас будет таблица UserGroup, расположенная между таблицами User и Group на диаграмме E / R. UserGroup будет иметь два столбца: user_id и group_id. Первичным ключом будет комбинация (user_id, group_id). Столбец user_id будет иметь отношение внешнего ключа к первичному ключу таблицы User. То же самое для столбца group_id и таблицы Group.
Там будет аналогичная договоренность с группой и ролью. У каждого будет первичный ключ. Таблица GroupRole будет находиться между двумя в вашей диаграмме E / R. Повторите приведенное выше словосочетание, и вы получите его.
Я бы создал диаграмму E / R, чтобы показать вам, но я занят другими вещами. Я надеюсь, что этого достаточно для вас. Если нет, возможно, я добавлю это позже.
Таким образом, у пользователей нет ролей; Группы делают. Вы добавляете пользователя в группу, и этот пользователь получает все полномочия, которыми обладает группа. Таким образом, вы можете добавить определенную роль (например, права администратора для группы администраторов) одну для конкретной группы. Тогда каждый, кто будет добавлен в эту группу, получит эти разрешения.