Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

dua kunci asing ke tipe data numerik yang sama dan merujuknya ke dua tabel

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 )
);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Java - temukan penyebab pertama pengecualian

  2. Memasukkan Gambar Ke BLOB Oracle 10g

  3. Besar .patch_storage

  4. Oracle:Menggabungkan beberapa hasil dalam subquery menjadi satu nilai yang dipisahkan koma

  5. Mencari nilai NULL untuk Tipe Oracle yang berbeda