मेरे विचार से आप इसे बहुत जटिल बना रहे हैं। अपने पता स्कीमा को इतना अधिक सामान्यीकृत करने की कोई आवश्यकता नहीं है। मैंने देखा है कि अधिकांश सिस्टम जो कई ग्राहक पतों को संभालते हैं, उनमें आपकी तरह एक ग्राहक तालिका होती है, और फिर एक पता तालिका होती है, जो निम्नानुसार होती है:
customer_id
address_ordinal (small number for each customer: 0,1,2,3 etc).
primary (boolean)
address_1
address_2
locality (city, village, etc)
province (state, etc)
postcode (zip, postcode etc)
country
customer_id
customer
. के लिए एक विदेशी कुंजी है मेज़। प्राथमिक कुंजी (customer_id
.) का एक संयोजन है , address_ordinal
) primary
कॉलम true
है अगर पता प्राथमिक है।
आपूर्तिकर्ताओं के बारे में आपके प्रश्न के संबंध में, हो सकता है कि आप "संपर्क" नामक एक सामान्य तालिका बनाना चाहें, और अपने ग्राहकों और आपूर्तिकर्ताओं दोनों को contact_ids देना चाहें।
यदि आपके सिस्टम में एक संदर्भ तालिका है (शायद आप किसी डेटा आपूर्तिकर्ता से कुछ खरीदते हैं) जिसमें (पोस्टकोड, इलाके, प्रांत) पंक्तियाँ हैं, तो आप अपनी पता तालिका को पॉप्युलेट करने में मदद के लिए इसका उपयोग कर सकते हैं। लेकिन आपको अपने पतों को केवल हार्ड-कोडेड पोस्टकोड रखने के लिए बाध्य करने से बचना चाहिए:वे संदर्भ तालिकाएँ बहुत तेज़ी से पुरानी हो जाती हैं।