Вашият модел на данни изглежда няма много смисъл. Имате три различни обекта admin
, user
и login
. Изглежда, че и трите съхраняват една и съща информация - имейл адрес, потребителско име и парола (която се надявам за основна сигурност наистина да е хеш на парола). Ако има някакви връзки между таблиците, това нарушава основната нормализация, защото ще съхранявате една и съща информация на множество места.
Без да знаете бизнес изискванията за обектите, които всъщност се опитвате да моделирате, е трудно да знаете какво точно искате.
Първото ми предположение е, че имате два типа потребители, администратори и редовни потребители, всеки от които може да влезе в приложението ви. Ако приемем, че атрибутите на потребителите са доста последователни, независимо от тяхната роля (както администраторите, така и обикновените потребители имат имейл адреси, пароли и т.н.), най-простият начин за моделиране би бил с едно login
таблица с login_type
който ви казва дали даден потребител е администратор или обикновен потребител
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') )
);
Можете да направите това малко по-гъвкаво, като създадете справочна таблица за типовете влизане, които вашето login
препратки към таблици
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 )
);
Ако искате повече гъвкавост, следващата стъпка би била да кажете, че влизанията всъщност нямат тип. Вместо това те имат една или повече роли, които имат някакъв набор от разрешения. Може да имате admin
роля и regular user
роля първоначално, но по-късно искате да добавите read only user
роля, superuser
роля и т.н. В такъв случай ще имате нещо като
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 )
);