Ваш дизайн БД будет состоять из двух основных таблиц, представляющих user
и role
, и вспомогательной таблицы, представляющей отношение m:n
между ними.
create table User_tab (
login varchar2(100),
password_hash raw(100),
CONSTRAINT User_tab_pk PRIMARY KEY (login)
);
create table Role_tab (
id Int,
name varchar2(100),
CONSTRAINT Role_tab_pk PRIMARY KEY (id)
);
create table User_Role_tab (
login varchar2(100),
id Int,
CONSTRAINT User_Role_tab_pk PRIMARY KEY (login,id),
CONSTRAINT User_Tab_fk FOREIGN KEY (login) REFERENCES User_tab(login),
CONSTRAINT Role_tab_fk FOREIGN KEY (id) REFERENCES Role_tab(id)
);
Таким образом, чтобы получить список ролейдля конкретного пользователя вы будете использовать этот запрос
select id from User_Role_tab where login = ?
Обратите внимание, что вы правильно определили проблему с пропущенными ORM
.
Но учтите также, что с вашим подходом вы действительно пытаетесь переопределить ORM со всеми проблемами, которые он пытается решить или вызвать .Проверьте, например, n+1 select
проблемы.
Так что вы должны сделать некоторую первоначальную оценку, если ваша оценка осуществима.