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

डेटाबेस तालिकाएँ, एकाधिक असंबंधित तालिकाओं को संदर्भित करने वाली एक तालिका

मेरे अनुभव में, जब डेवलपर्स अपने सिस्टम को वास्तव में "गतिशील" बनाने की कोशिश करते हैं तो वे वास्तव में उन समस्याओं के लिए कोड करने की कोशिश कर रहे हैं जिनके बारे में उन्होंने अभी तक नहीं सोचा है। यह आमतौर पर लेने के लिए एक बुरा रास्ता है। क्या एक मॉड्यूल के लिए एक के बजाय दो टेबल शामिल करना वास्तव में इतना अतिरिक्त काम है?

हर मामले में जहां मैंने एक सामान्य "सब कुछ करता है" तालिका बनाने की कोशिश करने का पैटर्न (या विरोधी पैटर्न?) देखा है, यह उसके चेहरे पर सपाट है। RDBMS अच्छी तरह से परिभाषित समस्या क्षेत्रों के साथ सबसे अच्छा काम करते हैं। यदि मॉड्यूल को इतिहास रखने की आवश्यकता है तो मॉड्यूल को तालिका के साथ जाने के लिए एक इतिहास तालिका जोड़नी चाहिए। इसका एक बड़ा फायदा यह भी है कि जिस तालिका या मॉड्यूल के लिए इतिहास रखा जा रहा है, उसके आधार पर आप इतिहास में विभिन्न प्रकार की जानकारी रखना चाहते हैं। यदि आपके पास एक सामान्य इतिहास तालिका है जो और अधिक कठिन हो जाती है।

अब, यदि आप किसी विशेष आइटम (तालिका पंक्ति) को अद्यतन या सम्मिलित करने के लिए अंतिम उपयोगकर्ता को कैप्चर करना चाहते हैं और यह एकाधिक तालिकाओं में हो सकता है तो आप विरासत के पैटर्न का उपयोग कर सकते हैं जहां आपके पास मूल तालिका और एकाधिक बच्चों की तालिकाएं हैं। उदाहरण के लिए:

CREATE TABLE Audited_Items
(
    id    INT    NOT NULL    IDENTITY,
    CONSTRAINT PK_Audited_Items PRIMARY KEY CLUSTERED (id)
)
CREATE TABLE Articles
(
    id    INT            NOT NULL,
    [Article specific columns]
    CONSTRAINT PK_Articles PRIMARY KEY CLUSTERED (id),
    CONSTRAINT FK_Articles_Audited_Items FOREIGN KEY (id) REFERENCES Audited_Items (id)
)
CREATE TABLE Media
(
    id    INT            NOT NULL,
    [Media specific columns]
    CONSTRAINT PK_Media PRIMARY KEY CLUSTERED (id),
    CONSTRAINT FK_Media_Audited_Items FOREIGN KEY (id) REFERENCES Audited_Items (id)
)
CREATE TABLE Audit_Trail
(
    audited_item_id    INT         NOT NULL,
    audit_datetime     DATETIME    NOT NULL,
    user_id            INT         NOT NULL,
    [audit columns]
    CONSTRAINT PK_Audit_Trail PRIMARY KEY CLUSTERED (audited_item_id, audit_datetime),
    CONSTRAINT FK_Audit_Trail_Audited_Items FOREIGN KEY (audited_item_id) REFERENCES Audited_Items (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. क्या जावास्क्रिप्ट MySQL से जुड़ सकता है?

  2. किसी अन्य तालिका से चयन के साथ MySQL ट्रिगर अपडेट

  3. MySQL नामकरण सम्मेलन, क्या फ़ील्ड नाम में तालिका का नाम शामिल होना चाहिए?

  4. एन-गहराई वाले पेड़ में मूल्य की जांच?

  5. प्राथमिक कुंजी क्रम में पंक्तियों को सम्मिलित करना तेज़ है?