Enligt min åsikt gör du det här alldeles för komplicerat. Det finns ingen anledning att göra ditt adressschema så övernormaliserat. De flesta system som jag har sett som hanterar flera kundadresser har en kundtabell som din och har sedan en adresstabell enligt följande:
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
är en främmande nyckel till customer
tabell. Den primära nyckeln är en sammansättning av (customer_id
, address_ordinal
). Den primary
kolumnen är true
om adressen är den primära.
Angående din fråga om leverantörer, kanske du vill skapa en gemensam tabell som heter "kontakter", och ge både dina kunder och leverantörer contact_ids.
Om ditt system innehåller en referenstabell (kanske något du köper från en dataleverantör) som innehåller (postnummer, ort, provins) rader, kan du använda den för att fylla i din adresstabell. Men du bör undvika att tvinga dina adresser att bara innehålla hårdkodade postnummer:dessa referenstabeller blir väldigt fort inaktuella.