Meiner Meinung nach machst du das viel zu kompliziert. Es besteht keine Notwendigkeit, Ihr Adressschema so übernormalisiert zu machen. Die meisten Systeme, die ich gesehen habe und die mehrere Kundenadressen verarbeiten, haben eine Kundentabelle wie Ihre und dann eine Adresstabelle wie folgt:
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
ist ein Fremdschlüssel zum customer
Tisch. Der Primärschlüssel ist eine Zusammensetzung aus (customer_id
, address_ordinal
). Der primary
Spalte ist true
wenn die Adresse die primäre ist.
In Bezug auf Ihre Frage zu Lieferanten möchten Sie möglicherweise eine gemeinsame Tabelle mit dem Namen "Kontakte" erstellen und sowohl Ihren Kunden als auch Ihren Lieferanten contact_ids geben.
Wenn Ihr System eine Referenztabelle enthält (vielleicht etwas, das Sie von einem Datenlieferanten kaufen), die Zeilen (Postleitzahl, Ort, Provinz) enthält, können Sie diese verwenden, um Ihre Adresstabelle zu füllen. Aber Sie sollten es vermeiden, Ihre Adressen dazu zu zwingen, nur hartcodierte Postleitzahlen zu enthalten:Diese Referenztabellen veralten sehr schnell.