इस पर देखने के लिए एक अलग तरीका डेटा को समय-आयाम करना है।
अपनी मेज मान लिया जाये कि इस तरह दिखता है:
create table my_table (
my_table_id number not null primary key,
attr1 varchar2(10) not null,
attr2 number null,
constraint my_table_ak unique (attr1, att2));
तो अगर आप इसे इतना तरह बदल दिया है:
create table my_table (
my_table_id number not null,
attr1 varchar2(10) not null,
attr2 number null,
effective_date date not null,
is_deleted number(1,0) not null default 0,
constraint my_table_ak unique (attr1, att2, effective_date)
constraint my_table_pk primary key (my_table_id, effective_date));
आप ऑनलाइन हैं और उपलब्ध, My_table की एक पूरी चल इतिहास है करने में सक्षम हो जाएगा । आपको INSERT गतिविधि में अद्यतन गतिविधि को अवरुद्ध करने के लिए प्रोग्रामों के प्रतिमान (या डेटाबेस ट्रिगर्स का उपयोग) को बदलना होगा, और DELETE गतिविधि को IS_DELETED बूलियन को UPDATING में बदलने के लिए बदलना होगा।
कारण:
आप सही है कि इसी तरह इस समाधान रिकॉर्ड के आधार पर करने के लिए लेखा परीक्षा कर रहे हैं; मैंने इसे शुरुआत में एक स्ट्रिंग में खेतों के एक संयोजन के रूप में पढ़ा, जिसे मैंने देखा है। मैं क्षमाप्रार्थी हूं।
तालिका में समय-आयाम के बीच प्राथमिक अंतर और प्रदर्शन या स्केलेबिलिटी बलिदान के बिना रखरखाव के आसपास रिकॉर्ड आधारित ऑडिटिंग सेंटर का उपयोग करना।
रखरखाव: प्राथमिक तालिका में संरचनात्मक परिवर्तन करते समय छाया तालिका को बदलने के लिए याद रखने की आवश्यकता है। इसी प्रकार, किसी को ट्रिगर में परिवर्तन करने की याद रखने की आवश्यकता होती है जो परिवर्तन-ट्रैकिंग करता है, क्योंकि इस तरह के तर्क ऐप में नहीं रह सकते हैं। यदि कोई टेबल तक पहुंच को सरल बनाने के लिए एक दृश्य का उपयोग करता है, तो आपको इसे अपडेट करना होगा, और इसके बजाय ट्रिगर को बदलना होगा जो डीएमएल को अवरुद्ध करने के लिए होगा।
एक समय-आयामी तालिका में, आप जिस strucutural परिवर्तन की आवश्यकता है, उसे पूरा करते हैं, और आप कर चुके हैं। एक विरासत परियोजना पर एफएनजी होने वाले किसी व्यक्ति के रूप में, इस तरह की स्पष्टता की सराहना की जाती है, खासकर यदि आपको बहुत से रिफैक्टरिंग करना है।
प्रदर्शन और मापनीयता: यदि कोई प्रभावी/समाप्ति दिनांक कॉलम पर समय-आयामी तालिका को विभाजित करता है, तो सक्रिय रिकॉर्ड एक "तालिका" में होते हैं, और निष्क्रिय रिकॉर्ड दूसरे में होते हैं। वास्तव में आपके समाधान से कम स्केलेबल कैसा है? "हटाना" और सक्रिय रिकॉर्ड में ओरेकल में पंक्ति आंदोलन शामिल है, जो कवर के तहत एक डिलीट-एंड-डार्ट है - वास्तव में रिकॉर्ड-आधारित समाधान की आवश्यकता होगी।
प्रदर्शन का फ्लिप पक्ष यह है कि यदि एप्लिकेशन किसी दिनांक के रिकॉर्ड के लिए पूछताछ कर रहा है, तो विभाजन उन्मूलन डेटाबेस को केवल तालिका/अनुक्रमणिका को खोजने की अनुमति देता है जहां रिकॉर्ड हो सकता है; सक्रिय और निष्क्रिय रिकॉर्ड खोजने के लिए एक दृश्य-आधारित समाधान के लिए यूनियन-ऑल की आवश्यकता होगी, और इस तरह के दृश्य का उपयोग न करने के लिए यूनियन-ऑल को हर जगह में डालने की आवश्यकता है, या किसी प्रकार का "यहां देखें, फिर देखो" तर्क का उपयोग करना आवश्यक है ऐप, जिसमें मैं कहता हूं: ब्लीच।
संक्षेप में, यह एक डिज़ाइन विकल्प है; मुझे यकीन नहीं है कि या तो सही है या गलत है।
यह पूर्ण लगता है। मुझे आश्चर्य है कि प्रत्येक दृष्टिकोण के लिए प्रदर्शन कैसा होगा। तो रिकॉर्ड आधारित में, संस्करण फ़ील्ड के साथ दर्पण तालिका (फ़ील्ड के संदर्भ में) होगी? – saint
@ संत, प्रदर्शन एक समग्र है, यह उपयोग पैटर्न पर निर्भर करता है। लॉग फ़ाइल लिखने के लिए सबसे तेज़ होगा (esp। अगर अलग विभाजन या अलग नोड)। और निश्चित रूप से आप बहुत कुछ लिखेंगे। अब, पढ़ना कितना महत्वपूर्ण है? यदि आप एक सप्ताह में एक बार पढ़ना चाहते हैं तो यह विभिन्न क्षेत्रों के बीच समयरेखा सहसंबंध की जांच करने या कुछ अन्य डेटा खनन (चरम उदाहरण के रूप में) की तुलना में एक अलग बात है। – Unreason
@ संत, हां, रिकॉर्ड आधारित में आप वर्जनिंग फ़ील्ड (और संभवतः उपयोगकर्ता के रूप में अन्य रोचक मेटाडेटा) के साथ तालिकाओं का विस्तार करते हैं। – Unreason