sql - How far to take normalization in database design? -


मेरे पास ये टेबल हैं:

  प्रोजेक्ट (प्रोजेक्टआईडी, निर्मित बीआईआईडी) कर्मचारी (empID, depID  

("बनाया गया बीआईडी" कर्मचारियों के लिए है।)

और मेरे पास एक ऐसी क्वेरी है जिसके लिए मुझे चलाने की जरूरत है एक वेब अनुप्रयोग के लगभग हर अनुरोध जो एक कार्यालय में सभी परियोजनाओं को पकड़ लेता है क्या यह तीनों को खत्म करने के लिए परियोजनाओं में एक अनावश्यक "OfficeID" कॉलम जोड़ने के लिए खराब अभ्यास है? या क्या मुझे निम्नलिखित काम करना चाहिए?

  से चुनें परियोजनाएं पी कर्मचारियों को शामिल करें पर पी। क्रेटेडबीवाई = E.Empid ई विभागों पर विभागों डी डी। डीआईपीआईडी ​​= डी। डीईपीआईडी ​​जीओ कार्यालय ओ पर डी। OfficeID = O.officeID WHERE O.officeID = @SomeOfficeID  

जब तक मैं प्रदर्शन समस्याओं का ध्यान नहीं देता?

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

नुकसान:

  • यह अखंडता सुनिश्चित करने के लिए अधिक कोडिंग और समय लेता है (जो आपके मामले में सबसे महत्वपूर्ण है)

  • यह डीएमएल (INSERT / UPDATE / DELETE) पर धीमी है

  • यह अधिक स्थान लेता है

अनुकूलन के लिए, आप या तो तेजी से पूछताछ या तेज डीएमएल के लिए (एक नियम के रूप में, ये दो विरोधी हैं)।

तेजी से पूछताछ के लिए अनुकूलन अक्सर डेटा डुप्लिकेट करते हैं, हो यह denormalization, सूचकांक, जो कुछ भी अतिरिक्त तालिकाएं हो।

> सूचकांकों के मामले में, यह आपके लिए करता है, लेकिन बदनामकरण के मामले में आपको अपने आप को कोड की आवश्यकता होगी यदि विभाग एक और कार्यालय पर जाता है? आपको इसके बजाय एक की बजाय तीन तालिकाओं में इसे ठीक करना होगा।

इसलिए, जैसा कि मैं आपके तालिकाओं के नामों से देख सकता हूं, वहां लाखों रिकॉर्ड नहीं होंगे। तो आप अपने डेटा को बेहतर मान लेंगे, यह प्रबंधन के लिए सरल होगा।


Comments