Zdá se, že váš datový model nedává moc smysl. Máte tři různé entity admin
, user
a login
. Zdá se, že všechny tři ukládají stejné informace - e-mailovou adresu, uživatelské jméno a heslo (což doufám pro základní zabezpečení je skutečně hash hesla). Pokud mezi tabulkami existují nějaké vztahy, porušuje to základní normalizaci, protože byste ukládali stejné informace na více místech.
Pokud neznáte obchodní požadavky na entity, které se ve skutečnosti snažíte modelovat, je těžké přesně vědět, co chcete.
Můj první odhad je, že máte dva typy uživatelů, administrátory a běžné uživatele, z nichž každý se může přihlásit do vaší aplikace. Za předpokladu, že atributy uživatelů jsou docela konzistentní bez ohledu na jejich roli (administrátoři i běžní uživatelé mají e-mailové adresy, hesla atd.), nejjednodušší způsob modelování by byl pomocí jediného login
tabulka s login_type
který vám řekne, zda je konkrétní uživatel správcem nebo běžným uživatelem
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') )
);
Můžete to udělat trochu flexibilnější vytvořením vyhledávací tabulky pro typy přihlášení, ke kterým se login
odkazy na tabulky
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 )
);
Pokud chcete větší flexibilitu, dalším krokem by bylo říci, že přihlášení ve skutečnosti nemají typ. Místo toho mají jednu nebo více rolí, které mají určitou sadu oprávnění. Možná máte admin
role a regular user
role zpočátku, ale později chcete přidat read only user
role, superuser
role atd. V takovém případě byste měli něco jako
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 )
);