आपका डेटा मॉडल बहुत मायने नहीं रखता है। आपके पास तीन अलग-अलग इकाइयां हैं 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 )
);