Il tuo modello di dati non sembra avere molto senso. Hai tre diverse entità admin
, user
e login
. Tutti e tre sembrano memorizzare le stesse informazioni:un indirizzo e-mail, un nome utente e una password (che spero per la sicurezza di base sia davvero un hash della password). Se ci sono relazioni tra le tabelle, ciò viola la normalizzazione di base perché memorizzeresti le stesse informazioni in più posizioni.
Non conoscendo i requisiti aziendali per le entità che stai effettivamente cercando di modellare, è difficile sapere esattamente cosa vuoi.
La mia prima ipotesi è che tu abbia due tipi di utenti, amministratori e utenti regolari, ognuno dei quali può accedere alla tua applicazione. Supponendo che gli attributi degli utenti siano abbastanza coerenti indipendentemente dal loro ruolo (sia gli amministratori che gli utenti regolari hanno indirizzi e-mail, password, ecc.), il modo più semplice per modellarlo sarebbe con un singolo login
tabella con un login_type
che ti dice se un particolare utente è un amministratore o un utente normale
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') )
);
Puoi renderlo un po' più flessibile creando una tabella di ricerca per i tipi di accesso che il tuo login
riferimenti alle tabelle
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 desideri una maggiore flessibilità, il passaggio successivo sarebbe dire che gli accessi non hanno davvero un tipo. Al contrario, hanno uno o più ruoli che dispongono di una serie di autorizzazioni. Potresti avere un admin
role e un regular user
ruolo inizialmente, ma in seguito desidera aggiungere un read only user
ruolo, un superuser
ruolo, ecc. In tal caso, avresti qualcosa come
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 )
);