Naar mijn mening maak je dit veel te ingewikkeld. Het is niet nodig om uw adresschema zo over-genormaliseerd te maken. De meeste systemen die ik heb gezien die meerdere klantadressen verwerken, hebben een klantentabel zoals die van jou, en hebben dan een adrestabel, als volgt:
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
is een refererende sleutel voor de customer
tafel. De primaire sleutel is een samenstelling van (customer_id
, address_ordinal
). De primary
kolom is true
als het adres het primaire adres is.
Wat betreft uw vraag over leveranciers, wilt u misschien een algemene tabel maken met de naam "contacten", en zowel uw klanten als leveranciers contact_id's geven.
Als uw systeem een referentietabel bevat (misschien iets dat u bij een gegevensleverancier koopt) met (postcode, plaats, provincie) rijen, kunt u die gebruiken om uw adrestabel te vullen. Maar u moet voorkomen dat uw adressen alleen hardgecodeerde postcodes bevatten:die referentietabellen verouderen erg snel.