допустим, у меня есть справочная таблица данных roles
, заполненная всеми ролями, которые может быть предоставлен пользователю. Строки достаточно стабильны, это означает, что редко кто-то добавляет новую роль в таблицу. Дополнительно есть таблица users
и таблица соединений users_roles
. Фактически, таблица roles
просто необходима, чтобы предоставить пользователю некоторые предопределенные роли, добавив запись в users_roles
.
Таблица roles
довольно проста:
CREATE TABLE IF NOT EXISTS admin.roles (
id CHAR(16) PRIMARY KEY,
description VARCHAR(256) NOT NULL
);
В следующем примере описана роль:
INSERT INTO admin.roles VALUES('CS_AGENT', 'A customer service agent');
Очевидно, мне нужны возможные значения id
где-нибудь в моем коде. Это набор строк, но я бы хотел предотвратить магические строки и сделать этот тип более безопасным.
Насколько я понимаю, есть несколько вариантов:
- создать символ для каждой роли id
- создать новый тип
RoleId
, который расширяет String
и объявить значения
Чтобы определить набор идентификаторов ролей, вот мои варианты:
- используйте
Enumeration
- использовать запечатанный признак / запечатанный объект и извлекать из него объекты падежа
Я использую JOOQ для своего слоя персистентности, и было бы неплохо, если бы я мог использовать безопасный тип RoleId в своих запросах без ручного преобразования его в String и наоборот.
Что было бы лучшим решением для этого?