2014-04-08 11 views
29

जब ट्यूटोरियल को देख वहाँ अक्सर एक स्कीमा और एक मॉडल है, खासकर जब नेवला/MongoDB के साथ काम कर के बीच एक चित्रण है। यह खत्म हो गया पोर्टिंग कुछ भ्रामक PostgreSQL के लिए, के रूप में 'मॉडल' है कि प्रणाली के तहत अस्तित्व में ही नहीं बनाता है। दो दृष्टिकोण क्या अंतर है?मोंगोस: स्कीमा बनाम मॉडल?

उदाहरण के लिए, क्या इस लाइन का एक postgres/एसक्यूएल ORM बराबर होगा?

(नेवला और express.js):

var userSchema = schema.define('local', { 
    username:  String, 
    password:  String, 
}); 

module.exports = mongoose.model('User', userSchema); 
+0

संभावित डुप्लिकेट [मोंगोस के पास स्कीमा और मॉडल दोनों क्यों हैं?] (Http://stackoverflow.com/questions/9127174/why-does-mongoose-have-both-chechemas-and-models) – JohnnyHK

+0

@ जॉनीनीएचके I दिया जवाब के लिए यह एक के माध्यम से पढ़ते हैं, लेकिन मेरे सवाल का अधिक बराबर PostgreSQL कार्यप्रवाह (बजाय नेवला के क्षेत्र में विशुद्ध रूप से एक चर्चा) की दिशा में सक्षम है – dnv

उत्तर

44

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

सीधे आरडीबीएमएस में, स्कीमा डीडीएल स्टेटमेंट्स (तालिका बनाएं, तालिका बदलें, आदि) द्वारा कार्यान्वित किया गया है, जबकि मॉडल की कोई प्रत्यक्ष अवधारणा नहीं है, केवल SQL कथन जो अत्यधिक लचीली क्वेरी (चयन कथन) के साथ-साथ बुनियादी सम्मिलन, अद्यतन, संचालन हटाएं।

एक और तरीका है इसके बारे में सोचने के लिए एसक्यूएल की प्रकृति आप केवल विशेष क्षेत्रों का चयन करने के साथ-साथ संबंधित टेबल से रिकॉर्ड एक साथ शामिल होने से प्रत्येक प्रश्न के लिए एक "मॉडल" निर्धारित कर सकते हैं।

अन्य ओआरएम सिस्टम जैसे रूबी ऑन रेल, स्कीमा को ActiveRecord तंत्र के माध्यम से परिभाषित किया गया है और मॉडल अतिरिक्त मॉडल तर्क है जो आपके मॉडल सबक्लास जोड़ता है जो अतिरिक्त व्यावसायिक तर्क को परिभाषित करता है।

+0

धन्यवाद। मैं कुछ स्थानों पर देखता हूं कि उपयोगकर्ता ऑब्जेक्ट अभी भी इस तरह बनाया गया है और पोस्टग्रेस का उपयोग करके 'मॉडल' भी कहा जाता है: "var User = sequelize.define ('user', {field: value});" जो मुख्य ऐप में पारित किया जाता है। क्या यह सिर्फ एक स्कीमा परिभाषा है? स्रोत http://sarabinns.com/tag/passport-js-sequelize-postgresql/ है – dnv

+1

'{क्षेत्र: मूल्य)' भाग स्कीमा है। 'उपयोगकर्ता' भाग मॉडल है। –

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