2010-05-12 14 views
8

एक सहयोगी हमारी सभी डेटाबेस टेबल पर थोड़ा मुखौटा जोड़ रहा है। सिद्धांत रूप में यह है कि हम पूरे सिस्टम में प्रत्येक पंक्ति के कुछ गुणों को ट्रैक कर सकते हैं। उदाहरण के लिए ...डेटाबेस में सभी तालिकाओं के लिए थोड़ा सा मुखौटा जोड़ना उपयोगी है?

  • पंक्ति प्रणाली के साथ भेज दिया या क्लाइंट द्वारा जोड़े गए है एक बार वे प्रणाली
  • पंक्ति तालिका से हटा दिया गया है (नरम हटाता है)
  • है का उपयोग शुरू किया पंक्ति पंक्तियों के एक सेट के भीतर एक डिफ़ॉल्ट मान

क्या यह एक अच्छा विचार है? क्या ऐसे अन्य उपयोग हैं जहां यह दृष्टिकोण फायदेमंद होगा?

मेरी प्राथमिकता यह है कि ये गुण स्पष्ट रूप से महत्वपूर्ण हैं, और प्रत्येक संपत्ति के लिए समर्पित कॉलम रखने के लिए साथी डेवलपर्स के लिए क्या हो रहा है, यह सुनिश्चित करने के लिए उचित है।

उत्तर

10

वास्तव में नहीं, नहीं।

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

संभावित चीजें आप इसके साथ कर सकता है के बहुत सारे हैं, लेकिन यह सवाल "क्यों यह बजाय की पहचान क्या हम के लिए अभी उन बिट्स का उपयोग करेगा की कि जिस तरह से करते हैं और सिर्फ उन्हें उचित कॉलम बना भीख माँगता? " आप वास्तव में इस तरह स्कीमा परिवर्तनों की संभावना को बाधित नहीं करते हैं, इसलिए ऐसा लगता है कि यह एक समस्या को हल करने की कोशिश कर रहा है जिसे आप वास्तव में "हल" नहीं कर सकते हैं और विशेष रूप से बिटमैस्क के साथ नहीं।

आपके द्वारा उल्लिखित प्रत्येक चीज डेटाबेस पर वास्तविक कॉलम के साथ हल की जा सकती है (और होना चाहिए), और BitMaskOptions फ़ील्ड के बिट 5 की तुलना में वे अधिक स्वयं-दस्तावेज हैं।

7

एक समर्पित कॉलम बेहतर है, क्योंकि यह निस्संदेह अधिक स्पष्ट और कम त्रुटि-प्रवण है। SQL सर्वर already stores BIT columns efficiently, इसलिए प्रदर्शन कोई समस्या नहीं है।

एकमात्र तर्क जिसे मैं बिटमैस्क के लिए देख सकता हूं, हर बार जब आप एक नया झंडा जोड़ते हैं तो डीबी स्कीमा को बदलना नहीं पड़ता है, लेकिन वास्तव में, यदि आप नए झंडे जोड़ रहे हैं तो अक्सर कुछ सही नहीं होता है।

+1

इस बिंदु को बढ़ाने के लिए: बिट-फ़ील्ड ** ** स्कीमा को बदल रहा है, बस डीबीएम के लिए पूरी तरह से अदृश्य है, और ज्यादातर उपयोगकर्ताओं के लिए अदृश्य है। – msw

+0

इवगेनी ने इसे बहुत संक्षेप में दिया है, यहां कोई जवाब जोड़ने का कोई मतलब नहीं है।बिटमैस्क के बारे में सोचने का एकमात्र कारण अलग-अलग झंडे की तुलना में स्टोरेज स्पेस को सहेजना है, लेकिन एसक्यूएल सर्वर 8 बीआईटी कॉलम के मामले में वैसे भी एक बाइट में पैक किया जाता है। आप इन क्षेत्रों के खिलाफ एक भ्रमपूर्ण लाभ के लिए हर एक प्रश्न को जटिल बना देंगे। तो Evgeny के लिए एक जबरदस्त +1। – Cowan

4

नहीं, यह दूरस्थ रूप से आईएमओ का एक अच्छा विचार भी नहीं है। प्रत्येक कॉलम को एक अवधारणा और मूल्य का प्रतिनिधित्व करना चाहिए। बिट मास्क में सभी प्रकार के प्रदर्शन और रखरखाव की समस्याएं होती हैं। नए डेवलपर्स कैसे समझते हैं कि प्रत्येक बिट का मतलब क्या है? आप किसी को बिट्स के क्रम के गलती से मिश्रण करने से कैसे रोकते हैं?

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

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