Votre modèle de données ne semble pas avoir beaucoup de sens. Vous avez trois entités différentes admin
, user
, et login
. Tous les trois semblent stocker les mêmes informations - une adresse e-mail, un nom d'utilisateur et un mot de passe (qui, j'espère pour la sécurité de base, est vraiment un hachage de mot de passe). S'il existe des relations entre les tables, cela enfreint la normalisation de base car vous stockeriez les mêmes informations à plusieurs endroits.
Ne connaissant pas les exigences commerciales des entités que vous essayez réellement de modéliser, il est difficile de savoir précisément ce que vous voulez.
Ma première supposition est que vous avez deux types d'utilisateurs, les administrateurs et les utilisateurs réguliers, chacun pouvant se connecter à votre application. En supposant que les attributs des utilisateurs sont assez cohérents quel que soit leur rôle (les administrateurs et les utilisateurs réguliers ont des adresses e-mail, des mots de passe, etc.), la façon la plus simple de modéliser cela serait avec un seul login
table avec un login_type
qui vous indique si un utilisateur particulier est un administrateur ou un utilisateur régulier
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') )
);
Vous pouvez rendre cela un peu plus flexible en créant une table de recherche pour les types de connexion que votre login
références de table
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 )
);
Si vous voulez plus de flexibilité, la prochaine étape serait de dire que les connexions n'ont pas vraiment de type. Au lieu de cela, ils ont un ou plusieurs rôles qui ont un ensemble d'autorisations. Vous avez peut-être un admin
rôle et un regular user
rôle initialement, mais plus tard, vous souhaitez ajouter un read only user
rôle, un superuser
rôle, etc. Dans ce cas, vous auriez quelque chose comme
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 )
);