Seu modelo de dados não parece fazer muito sentido. Você tem três entidades diferentes
admin
, user
e login
. Todos os três parecem armazenar as mesmas informações - um endereço de e-mail, um nome de usuário e uma senha (que espero que para segurança básica seja realmente um hash de senha). Se houver algum relacionamento entre as tabelas, isso viola a normalização básica porque você armazenaria as mesmas informações em vários locais. Sem conhecer os requisitos de negócios para as entidades que você está realmente tentando modelar, é difícil saber exatamente o que você deseja.
Meu primeiro palpite é que você tem dois tipos de usuários, administradores e usuários regulares, cada um dos quais pode fazer login em seu aplicativo. Supondo que os atributos dos usuários sejam bastante consistentes, independentemente de sua função (administradores e usuários regulares têm endereços de e-mail, senhas, etc.), a maneira mais simples de modelar isso seria com um único
login
tabela com um login_type
que informa se um determinado usuário é um administrador ou um usuário comum create table login (
login_id integer primary key,
email varchar2(255),
password_hash raw(32),
login_type varchar2(1) check( login_type IN ('A', 'U') )
);
Você pode tornar isso um pouco mais flexível criando uma tabela de pesquisa para os tipos de login que seu
login
referências de tabela create table login_type_lkup (
login_type_code varchar2(1) primary key,
login_type_desc varchar2(255)
);
create table login (
login_id integer primary key,
email varchar2(255),
password_hash raw(32),
login_type_code varchar2(1) references login_type_lkup( login_type_code )
);
Se você quiser mais flexibilidade, o próximo passo seria dizer que os logins não têm realmente um tipo. Em vez disso, eles têm uma ou mais funções que possuem algum conjunto de permissões. Você pode ter um
admin
função e um regular user
função inicialmente, mas depois deseja adicionar um read only user
função, um superuser
papel, etc. Nesse caso, você teria algo como create table login (
login_id integer primary key,
email varchar2(255),
password_hash raw(32)
);
create table role (
role_id integer primary key,
role_desc varchar2(255)
);
create table permission (
permission_id integer primary key,
permission_desc varchar2(255)
);
create table login_role (
login_id integer references login(login_id),
role_id integer references role(role_id),
primary key pk_login_role( login_id, role_id )
);
create table role_permission (
role_id integer references role(role_id),
permission_id integer references permission(permission_id),
primary key pk_role_permission( role_id, permission_id )
);