Efter min mening gør du det alt for komplekst. Der er ingen grund til at gøre dit adresseskema så overnormaliseret. De fleste systemer, jeg har set, der håndterer flere kundeadresser, har en kundetabel som din og har derefter en adressetabel som følger:
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
er en fremmednøgle til customer
bord. Den primære nøgle er en sammensætning af (customer_id
, address_ordinal
). Den primary
kolonnen er true
hvis adressen er den primære.
Med hensyn til dit spørgsmål om leverandører, vil du måske lave en fælles tabel kaldet "kontakter", og give både dine kunder og leverandører contact_ids.
Hvis dit system indeholder en referencetabel (måske noget, du køber fra en dataleverandør), der indeholder (postnummer, lokalitet, provins) rækker, kan du bruge den til at hjælpe med at udfylde din adressetabel. Men du bør undgå at tvinge dine adresser til kun at indeholde hårdkodede postnumre:disse referencetabeller bliver meget hurtigt forældede.