Когда использовать внешний ключ, а когда литеральную запись?
Когда использовать связь указывающую на другую таблицу, а когда записывать литералом?
Например rbac:
Есть таблица пользователи (user) : id | login
А есть таблица ролей пользователей (role): id | name
Так же есть таблица назначений этих ролей (role_assignment): id | role_id*** | user_id
я встречал разные варианты, где-то role_id - внешний ключ, указывающий на запись в role, а где-то там просто записано имя роли
Почему и в каких случаях - следует делать не внешний ключ, а записывать имя?
Текст — когда роль имеет отдельную смысловую нагрузку, например, роль в фильме.
Код из связанной таблицы — когда роль определяет общий функционал, например, уровень доступа.
Нет, про роль в фильме и подобное - это понятно, тут даже вопросов нет.
Суть в избыточных данных, например rbac, у нас имя роли хранится в таблице role, зачем нам в таблице назначений использовать текстовую запись, а не ссылку на эту же роль?