Според мен правите това твърде сложно. Няма нужда да правите вашата адресна схема толкова свръхнормализирана. Повечето системи, които съм виждал, които обработват множество адреси на клиенти, имат таблица с клиенти като вашата и след това имат таблица с адреси, както следва:
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.
Ако вашата система съдържа референтна таблица (може би нещо, което купувате от доставчик на данни), съдържаща редове (пощенски код, населено място, провинция), можете да я използвате, за да помогнете за попълването на вашата адресна таблица. Но трябва да избягвате да насилвате адресите ви да съдържат само твърдо кодирани пощенски кодове:тези референтни таблици остаряват много бързо.