मैं ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग और (ज्यादातर ट्रांसेक्शनल, लेकिन कुछ OLAP) डेटाबेस डिज़ाइन दोनों करता हूं, और मेरी परिस्थितियों के लिए, बहुत सारे पुनरावर्ती थीम (कम से कम ओएलटीपी के साथ) हैं।
3nf सामान्यीकरण का अभ्यास करने से मुझे एकल जिम्मेदारी सिद्धांत के कुछ प्रकार का अभ्यास करने में मदद मिलती है। एक तालिका को आपके सिस्टम में एक अवधारणा का प्रतिनिधित्व करना चाहिए - और अवधारणाओं को एक दूसरे से संबंधित होना चाहिए ताकि वे वास्तविकता की नकल करने का प्रयास करें; उदाहरण के लिए, यदि मैं एक ऐसी प्रणाली का निर्माण कर रहा हूं, जहां एक ग्राहक के पास 0 या कई गतिविधियां हो सकती हैं, तो मैं एक ग्राहक तालिका और एक गतिविधि तालिका बनाता हूं। गतिविधि तालिका का ग्राहक तालिका में एक विदेशी कुंजी संबंध है। जब मैं संग्रहीत प्रक्रियाओं का निर्माण कर रहा हूं, तो मैं ग्राहक और गतिविधि में शामिल होने के लिए एक बाहरी जुड़ाव का उपयोग करना सुनिश्चित करूंगा क्योंकि व्यवसाय की आवश्यकता है कि ग्राहक के पास 0 गतिविधियां हो सकती हैं।
मैं पुल (लिंक) टेबलों का उपयोग करके विस्तार के अवसरों के लिए भी देखता हूं। उदाहरण के लिए, यदि मैं एक व्यावसायिक नियम का प्रतिनिधित्व करने की कोशिश कर रहा था, जहां एक पुस्तक में लेखकों के लिए असीमित (चर) संख्या हो सकती है, तो मैं एक पुस्तक तालिका, एक लेखक तालिका और एक पुल / लिंक तालिका बनाऊंगा जिसमें दोनों के लिए विदेशी प्रमुख संदर्भ हों पुस्तक और लेखक।
इसके अलावा, मैं सभी तालिकाओं (आमतौर पर ऑटो-इन्क्रीमेंटिंग पहचान कॉलम पर सरोगेट कुंजियों का उपयोग करता हूं, लेकिन शायद गिड्स - कोड में छापे वाले ट्रेडऑफ़ यह है कि वे एक साधारण पूर्णांक की तुलना में अधिक मेमोरी स्पेस लेते हैं), और मैं अपने लिए प्राकृतिक कुंजी का भरोसा करने से बचता हूं लुक्स (ब्रिज / लिंक टेबल्स को छोड़कर)। डिफ़ॉल्ट रूप से, मैं भी सामान्य विदेशी कुंजी कॉलम पर अनुक्रमित बनाता हूं, और अनुक्रमण रणनीतियों का अनुकूलन करने के लिए समय-समय पर संग्रहीत प्रक्रियाओं / सिस्टम प्रश्नों की समीक्षा करता हूं। मेरे द्वारा उपयोग की जाने वाली एक और अनुक्रमणिका रणनीति मेरे कोड में उन स्थानों की तलाश करने के लिए है जहाँ मैं एक खोज स्तंभ के आधार पर एक संग्रह का निर्माण करता हूँ, और खोज स्तंभों में उपयुक्त अनुक्रमणिका जोड़ता हूँ।