2008-08-08 16 views
8

क्या डेटाबेस में विरासत का उपयोग करने का कोई तरीका है (विशेष रूप से SQL सर्वर 2005 में)?डेटाबेस में विरासत?

मान लीजिए मैं CreatedOn, CreatedBy जो मैं अपने संस्थाओं के सभी पर जोड़ना चाहते हैं की तरह कुछ क्षेत्र की है। मैं इन फ़ील्ड को प्रत्येक तालिका में जोड़ने के बजाय वैकल्पिक विकल्प ढूंढ रहा हूं।

+0

मुझे लगता है कि आपका प्रश्न अधिक उचित रूप से वाक्यांशित किया जाएगा "डेटाबेस में ऑडिटिंग को संभालने के लिए कुछ अनुशंसित तरीके क्या हैं?" –

+0

यदि यह एकमात्र उद्देश्य है, तो मैं सहमत हूं। लेकिन डीबी-इरिटिटेंस सवाल एक अच्छा है –

+0

Realted: http://stackoverflow.com/questions/386652/techniques-for-डेटाबेस- विरासत – jpalecek

उत्तर

3

SQL सर्वर 2005 में तालिकाओं के बीच विरासत जैसी कोई चीज नहीं है, और जैसा कि अन्य लोगों द्वारा नोट किया गया है, आप जब तक उन्हें बनाते हैं तो तालिका में आवश्यक कॉलम जोड़ने में सहायता प्राप्त कर सकते हैं, लेकिन यह नहीं होगा जैसा कि आप जानते हैं विरासत हो।

इसे अपने स्रोत कोड फ़ाइलों के लिए टेम्पलेट की तरह सोचें।

गेटकिल्लर का उल्लेख है, तो आप साझा डेटा वाली एक तालिका बना सकते हैं और इसे विदेशी कुंजी के साथ संदर्भित कर सकते हैं, लेकिन आपको या तो ऑडिट हुक, ट्रिगर्स या मैन्युअल रूप से अपडेट करना होगा।

नीचे पंक्ति: मैन्युअल कार्य।

+0

किसी अन्य पोस्ट का संदर्भ न देने का प्रयास करें क्योंकि वे मतदान के कारण आदेश से बाहर निकलते हैं। –

1

आप प्रबंधन स्टूडियो में टेम्पलेट फलक में एक टेम्पलेट बना सकते हैं। और उसके बाद हर बार जब आप एक नई टेबल बनाना चाहते हैं तो उस टेम्पलेट का उपयोग करें।

विफल होने पर, आप मूल तालिका और आईडी का संदर्भ देने वाली ऑडिट ट्रेल तालिका में बनाया गया और बनाया गया फ़ील्ड स्टोर कर सकते हैं।

विफल होने पर, इसे मैन्युअल रूप से करें।

+0

टेम्पलेट विरासत नहीं हैं –

3

PostgreSQL में यह सुविधा है। बस अपने तालिका परिभाषा के अंत से जोड़ें:

INHERITS FROM (tablename[, othertable...]) 

बच्चे मेज अपनी मूल के सभी स्तंभों होगा, और माता पिता तालिका में परिवर्तन बच्चा बदल जाएगा। साथ ही, बाल तालिका में सब कुछ मूल तालिका (डिफ़ॉल्ट रूप से) के प्रश्नों में आ जाएगा। दुर्भाग्यवश सूचकांक माता-पिता/बाल सीमा पार नहीं करते हैं, जिसका अर्थ यह भी है कि आप यह सुनिश्चित नहीं कर सकते कि कुछ कॉलम माता-पिता और बच्चे दोनों में अद्वितीय हैं।

जहां तक ​​मुझे पता है, यह एक सुविधा का उपयोग अक्सर नहीं किया जाता है।

+0

मैंने सोचा कि प्रश्न 'विशेष रूप से SQL सर्वर 2005 में' ? –

0

आप डेटा मॉडलिंग टूल जैसे ईआर/स्टूडियो या ईआरविन का उपयोग कर सकते हैं। दोनों टूल्स में डोमेन कॉलम होते हैं जहां आप एक कॉलम टेम्पलेट को परिभाषित कर सकते हैं जिसे आप किसी भी टेबल पर लागू कर सकते हैं। जब डोमेन बदलता है तो संबंधित कॉलम करें। ईआर/स्टूडियो में टेम्पलेट ट्रिगर भी हैं जो आप किसी भी तालिका में बना सकते हैं और आवेदन कर सकते हैं। इस प्रकार हम सैकड़ों ट्रिगर स्क्रिप्ट बनाने और बनाए रखने के बिना हमारे LastUpdatedBy और LastUpdatedDate कॉलम को अपडेट करते हैं।

यदि आप ऑडिट तालिका बनाते हैं तो आपके पास ऑडिट तालिका का उपयोग करने वाली प्रत्येक तालिका में प्रत्येक पंक्ति के लिए एक पंक्ति होगी। वह गन्दा हो सकता है। मेरी राय में, आप प्रत्येक तालिका में ऑडिट कॉलम डालने से बेहतर हैं। आप अपनी सभी टेबलों में टाइमस्टैम्प कॉलम भी डाल सकते हैं। आप कभी नहीं जानते कि सहमति कब एक समस्या बन जाती है। हमारे डीबी ऑडिट कॉलम जिन्हें हम प्रत्येक तालिका में डालते हैं: MadeDt, LastUpdatedBy, LastUpdatedDt और Timestamp हैं।

उम्मीद है कि इससे मदद मिलती है।

0

हमारे पास एक एसपीआरसी है जो किसी दिए गए तालिका में ऑडिट कॉलम जोड़ती है, और (वैकल्पिक रूप से) किसी मान में परिवर्तनों को ट्रैक करने के लिए इतिहास तालिका और संबंधित ट्रिगर बनाता है। दुर्भाग्यवश, कंपनी नीति का अर्थ है कि मैं साझा नहीं कर सकता, लेकिन यह वास्तव में हासिल करना मुश्किल नहीं है।

0

यदि आप GUID का उपयोग कर रहे हैं तो आप कॉलम GUID, MadeOn, MadeBy के साथ CreateHistory तालिका बना सकते हैं। तालिका को पॉप्युलेट करने के लिए आपको अभी भी प्रत्येक तालिका के लिए एक ट्रिगर बनाना होगा या इसे एप्लिकेशन तर्क में संभालना होगा।

+0

यदि आपके पास GUID है, तो आप कैसे जानेंगे कि यह किस तालिका से आया था? –

0

आप ऐसा करने के लिए विरासत का उपयोग नहीं करना चाहते हैं! जब तालिका बी, सी और डी तालिका ए से विरासत में आती है, तो इसका मतलब है कि पूछताछ तालिका ए आपको बी, सी और डी से रिकॉर्ड देगी। अब विचार करें ...

से हटाएं;

विरासत के बजाय

, का उपयोग की तरह बजाय ...

CREATE TABLE blah (
    blah_id  serial  PRIMARY KEY 
    , something text   NOT NULL 
    , LIKE template_table INCLUDING DEFALUTS 
); 
0

रमेश - मैं इस महाप्रकार और मेरे ई आर मॉडल में उप-प्रकार रिश्तों का उपयोग कर लागू होगा। आपके संबंधों को लागू करने के कुछ अलग-अलग भौतिक विकल्प भी हैं।

0
हे आर मानचित्रण में

, एक माता पिता की मेज जहां माता-पिता और बच्चे टेबल उदाहरण

create table Object (
    Id int NOT NULL --primary key, auto-increment 
    Name varchar(32) 
) 
create table SubObject (
    Id int NOT NULL --primary key and also foreign key to Object 
    Description varchar(32) 
) 

subobject के लिए एक ही पहचानकर्ता

उपयोग करने के लिए विरासत नक्शे वस्तु के लिए एक विदेशी कुंजी संबंध नहीं है। जब आप सबबब्जेक्ट पंक्ति बनाते हैं, तो आपको पहले ऑब्जेक्ट पंक्ति बनाना होगा और दोनों पंक्तियों में आईडी का उपयोग करना होगा

संबंधित मुद्दे