Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

एक ही संख्यात्मक डेटा प्रकार के लिए दो विदेशी कुंजियाँ और इसे दो तालिकाओं के लिए संदर्भित करें

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मुझे Oracle की अनुक्रमणिका संगठित तालिका का उपयोग कब करना चाहिए? या, मुझे कब नहीं करना चाहिए?

  2. सुरक्षित TO_NUMBER()

  3. डायरेक्ट-पाथ INSERT Oracle

  4. Oracle 18c में जेसन को कुशलतापूर्वक कैसे पार्स करें?

  5. Oracle PL/SQL:DBMS_SCHEDULER.CREATE_JOB उदाहरण