अगर मुझे आपके द्वारा बताई गई समस्या का सामना करना पड़ रहा था, तो मैं लॉग टेबल को नीचे की तरह डिजाइन करूंगा:
EntityName
:(स्ट्रिंग) इकाई जिसमें हेरफेर किया जा रहा है। (अनिवार्य)ObjectId
:जिस इकाई में हेरफेर किया जा रहा है, प्राथमिक कुंजी।FieldName
:(स्ट्रिंग) इकाई क्षेत्र का नाम।OldValue
:(स्ट्रिंग) इकाई फ़ील्ड पुराना मान।NewValue
:(स्ट्रिंग) इकाई फ़ील्ड नया मान।UserCode
:एप्लिकेशन उपयोगकर्ता अद्वितीय पहचानकर्ता। (अनिवार्य)TransactionCode
:संस्थाओं को बदलने वाले किसी भी ऑपरेशन के लिए एक अद्वितीय लेनदेन कोड (जैसे GUID) (अनिवार्य) की आवश्यकता होगी,
एक इकाई के कई क्षेत्रों को बदलने पर अद्यतन के मामले में, ये कॉलम सभी परिवर्तनों का पता लगाने के लिए महत्वपूर्ण बिंदु होंगे अपडेट (ट्रांसकेशन)ChangeDate
:कार्यवाही की तिथि। (अनिवार्य)FieldType
:एन्यूमरेशन या टेक्स्ट जो फ़ील्ड प्रकार जैसे टेक्स्ट या डबल दिखा रहा है। (अनिवार्य)
इस दृष्टिकोण को अपनाने से
किसी भी इकाई (तालिका) का पता लगाया जा सकता है
रिपोर्ट पढ़ने योग्य होगी
केवल परिवर्तन लॉग किए जाएंगे।
किसी एकल द्वारा परिवर्तनों का पता लगाने के लिए लेन-देन कोड महत्वपूर्ण बिंदु होगा कार्रवाई।
BTW
Store the changes in the entitychange table and then store the value
according to its datatype in entitychange_[bool|timestamp|double|string]
आवश्यकता नहीं होगी, एकल तालिका में आपके पास परिवर्तन और डेटा प्रकार होंगे
Use partitioning by HASH(entity_id)
मैं चेंजडेट द्वारा विभाजन करना पसंद करूंगा या चेंजडेट के लिए बैकअप टेबल बनाना पसंद करूंगा जो बैक अप लेने के लिए काफी पुराने हैं और मुख्य लॉग टेबल से रिमूवर हैं
Should I use another database system, maybe MongoDB?
कोई भी डेटा बेस अपनी स्वयं की समस्या और विपक्ष के साथ आता है, आप किसी भी RDBMS पर डिज़ाइन का उपयोग कर सकते हैं। MongoDB जैसे दस्तावेज़ आधारित डेटा बेस की एक उपयोगी तुलना यहां पाया जा सकता है
आशा है कि मददगार होगी।