स्कीमा का अधिक उपयोग / सही उपयोग?


9

Stackoverflow पर यह प्रश्न पूछने के बाद , मैंने सोचा कि मैंने जो किया है वह सही / सर्वोत्तम अभ्यास है।

असल में, मेरे द्वारा बनाई गई प्रत्येक वस्तु स्कीमा नाम के साथ एक उपयोग को दर्शाती है। उदाहरण के लिए, मेरे पास स्कीमा Auditऔर Admin(दूसरों के बीच) है।

यह बदले में कोई वस्तु नहीं छोड़ता है dbo। यह ठीक है? क्या कुछ और है जो मुझे करने की आवश्यकता है?


जवाबों:


13

स्कीमा न केवल एक महान सुरक्षा उपकरण है (जो उन्हें उपयोग करने के लिए पर्याप्त कारण है), लेकिन वे तार्किक पृथक्करण के लिए भी सही हैं। और ऐसा लगता है जैसे यह वही है जो आप अभ्यास कर रहे हैं।

यहां तक ​​कि अगर वर्तमान आवश्यकता को विशेष सुरक्षा की आवश्यकता नहीं है, तो सड़क का कहना है कि सभी डेटाबेस ऑब्जेक्ट जो ऑडिटिंग से संबंधित हैं, एक डेटाबेस भूमिका के लिए सुरक्षित होना चाहिए। यदि ये ऑब्जेक्ट पूरे dboस्कीमा में बिखरे हुए थे , तो आपको denyव्यक्तिगत वस्तुओं पर स्पष्ट रूप से अनुमति देनी होगी। लेकिन Auditस्कीमा के साथ , आप एक एकल denyकरते हैं और आप सेट होते हैं।

मैं व्यक्तिगत रूप से स्कीमा के उपयोग का अभ्यास करता हूं। डेटाबेस में सभी चीजों की तरह, हालांकि, एक खुशहाल माध्यम है। मैं डेटा परत के प्रत्येक बारीक पहलू के लिए एक स्कीमा नहीं बनाऊंगा। वहाँ भी कई स्कीमा और जुदाई के रूप में ऐसी बात है। लेकिन मैं अनुमान लगा रहा हूं कि आप कहीं भी उसके करीब नहीं हैं।


5

अनुमतियों के आधार पर एक विशिष्ट पैटर्न स्कीमा है, इसलिए आपके पास कोड के लिए आदि होगा WebGUI, Desktopइसलिए सभी ऑब्जेक्ट्स के पास स्कीमा से एक ही अनुमति है

यदि आपके पास स्पष्ट उपयोगकर्ता समूह हैं, तो आप उस पर अनुमति दे सकते हैं, लेकिन आप किसी बिंदु पर अतिव्यापी और गड़बड़ अनुमति के साथ समाप्त करेंगे। मैं उपयोगकर्ता / समूह के चेक को कोड के अंदर कुछ चेक को चेक करने की अनुमति देता हूं और ऑब्जेक्ट्स को अनुमति नहीं देता: कहते हैं कि आपके पास एडमिन और एचआर एक्सेल उपयोगकर्ता हैं: ये सभी रन Desktopकोड हैं।

डेटा आमतौर पर साझा किया जाता है इसलिए मेरे पास एक Dataस्कीमा, शायद एक Historyया Archiveस्कीमा होगा।

कुछ कोड सार्वजनिक नहीं हैं (जैसे UDF या आंतरिक खरीद) तो मैं Helperकोड के लिए एक स्कीमा का उपयोग करूंगा जिसे क्लाइंट कोड द्वारा नहीं चलाया जाना चाहिए।

अंत में, स्कीमा चाहते Stagingया Systemया Maintenanceउपयोगी कभी कभी कर रहे हैं।

यद्यपि dboस्कीमा में कोई उपयोगकर्ता ऑब्जेक्ट नहीं हैं , उपयोगकर्ता dboसभी स्कीमाओं का मालिक है।


4

dboस्कीमा में कोई भी वस्तु पूरी तरह से ठीक नहीं है। मैं जो देख सकता हूँ, वह स्कीमा का अति प्रयोग नहीं है, या तो - हालांकि कितने स्कीमा 'बहुत सारे' हैं, यह एक बहुत ही व्यक्तिपरक प्रश्न है (यह "ओओ डिजाइन कितने वर्गों में होना चाहिए?") के बराबर है।

केवल एक ही चीज़ जिसका मैं उल्लेख करूँगा, वह व्यक्तिगत वस्तुओं के बजाय स्कीमा पर अनुमतियाँ देना होगा (आपका SO प्रश्न अनुमतियों के बारे में कुछ भी निर्दिष्ट नहीं करता है)।


मैं आमतौर पर विकास के अंत में अनुमतियों को छाँट लेता हूं क्योंकि हमारे पास कई बार "तरल पदार्थ" विनिर्देश होते हैं। क्या आप इसे कैसे करते हैं? या क्या आप ऑब्जेक्ट आदि बनाते समय अनुमति प्रदान करते हैं
स्टुअर्ट ब्लैकलर

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

1

मैं मॉड्यूल और उपयोग पैटर्न के अनुसार अलग-अलग डेटाबेस में स्कीमा का उपयोग करना चाहूंगा। मुझे लगता है कि यह डेटाबेस तालिकाओं को समझना बहुत आसान बनाता है इसलिए रखरखाव आसान हो जाता है। मैं अपने पिछले एसक्यूएल सर्वर परियोजना में स्कीमा प्रकार का पालन कर रहा था। LT - लुकअप टेबल्स

COMMON
LT_COMMON
MODULENAME1
LT_MODULENAME1
..

एक बड़े मॉड्यूल के लिए, हमने उन्हें अधिक स्कीमाओं में भी अलग कर दिया। उदाहरण के लिए व्यक्तिगत मॉड्यूल में 5 से अधिक मॉड्यूल होते हैं।

PERSONEL_COMMON
PERSONEL_FINANCE
PERSONEL_MODULE2
..
LT_PERSONEL_COMMON
LT_PERSONEL_FINANCE
LT_PERSONEL_MODULE2

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


-1

ऑरेकल की तुलना में एसक्यूएल सर्वर के लिए सर्वश्रेष्ठ अभ्यास अलग-अलग हो सकते हैं लेकिन मेरा अनुभव यह है कि कम स्कीमा, बेहतर।
मुझे dba / प्रोग्रामर के लिए एक स्कीमा रखना पसंद है जिसमें विशेष विशेषाधिकार हैं और रखरखाव करने के लिए कुछ कोड हैं। सभी व्यावसायिक डेटा को एक स्कीमा में जाना चाहिए ताकि आप जान सकें कि यह कहाँ है। नामकरण परंपराएं तालिका या संग्रहीत कोड के उपयोग के बीच अंतर करने के लिए पर्याप्त हैं।
मैं एक मामला देख सकता हूं, जहां आपके पास कई व्यावसायिक इकाइयाँ हैं, जो अलग-अलग डेटा के कारण थोड़े से ओवरलैप के साथ प्रत्येक का अपना स्कीमा रखती हैं। अन्यथा इसे सरल रखें।


2
SQL सर्वर में स्कीमाएँ भिन्न होती हैं : पूर्ण डेटाबेस-स्कीमा-उपयोगकर्ता पृथक्करण होता है। मैंने Oracle स्कीमा को सीमित होने के लिए पाया
gbn
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.