Din datamodell verkar inte vara särskilt vettig. Du har tre olika enheter admin
, user
och login
. Alla tre av dem verkar lagra samma information - en e-postadress, ett användarnamn och ett lösenord (som jag hoppas för grundläggande säkerhet är verkligen en lösenords-hash). Om det finns några relationer mellan tabellerna bryter det mot grundläggande normalisering eftersom du skulle lagra samma information på flera ställen.
Om du inte känner till affärskraven för de enheter du faktiskt försöker modellera, är det svårt att veta exakt vad du vill ha.
Min första gissning är att du har två typer av användare, admins och vanliga användare, som var och en kan logga in på din applikation. Om man antar att användarnas attribut är ganska konsekventa oavsett roll (både administratörer och vanliga användare har e-postadresser, lösenord etc.) är det enklaste sättet att modellera med en enda login
tabell med en login_type
som talar om för dig om en viss användare är en administratör eller en vanlig användare
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') )
);
Du kan göra det lite mer flexibelt genom att skapa en uppslagstabell för de inloggningstyper som din login
tabellreferenser
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 )
);
Om du vill ha mer flexibilitet skulle nästa steg vara att säga att inloggningar egentligen inte har en typ. Istället har de en eller flera roller som har en uppsättning behörigheter. Du kanske har en admin
roll och en regular user
roll initialt men senare vill lägga till en read only user
roll, en superuser
roll, etc. I så fall skulle du ha något liknande
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 )
);