Model data Anda sepertinya tidak masuk akal. Anda memiliki tiga entitas berbeda admin
, user
, dan login
. Ketiganya tampaknya menyimpan informasi yang sama-- alamat email, nama pengguna, dan kata sandi (yang saya harap untuk keamanan dasar benar-benar hash kata sandi). Jika ada hubungan antara tabel, itu melanggar normalisasi dasar karena Anda akan menyimpan informasi yang sama di banyak tempat.
Tidak mengetahui persyaratan bisnis untuk entitas yang sebenarnya Anda coba modelkan, sulit untuk mengetahui dengan tepat apa yang Anda inginkan.
Dugaan pertama saya adalah Anda memiliki dua jenis pengguna, admin dan pengguna biasa, yang masing-masing dapat masuk ke aplikasi Anda. Dengan asumsi bahwa atribut pengguna cukup konsisten terlepas dari peran mereka (baik admin dan pengguna biasa memiliki alamat email, kata sandi, dll.) cara paling sederhana untuk membuat model adalah dengan satu login
tabel dengan login_type
yang memberi tahu Anda apakah pengguna tertentu adalah admin atau pengguna biasa
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') )
);
Anda dapat membuatnya sedikit lebih fleksibel dengan membuat tabel pencarian untuk jenis login yang login
Anda referensi tabel
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 )
);
Jika Anda menginginkan lebih banyak fleksibilitas, langkah selanjutnya adalah mengatakan bahwa login tidak benar-benar memiliki tipe. Sebaliknya, mereka memiliki satu atau lebih peran yang memiliki beberapa set izin. Anda mungkin memiliki admin
peran dan regular user
peran awalnya tetapi kemudian ingin menambahkan read only user
peran, superuser
peran, dll. Dalam hal ini, Anda akan memiliki sesuatu seperti
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 )
);