Moim zdaniem sprawiasz, że jest to zbyt skomplikowane. Nie ma potrzeby, aby schemat adresu był tak nadmiernie znormalizowany. Większość systemów, które widziałem, które obsługują wiele adresów klientów, ma tabelę klientów taką jak twoja, a następnie tabelę adresów w następujący sposób:
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
jest kluczem obcym dla customer
stół. Klucz podstawowy jest złożony z (customer_id
, address_ordinal
). primary
kolumna jest true
jeśli adres jest adresem podstawowym.
Jeśli chodzi o Twoje pytanie dotyczące dostawców, możesz utworzyć wspólną tabelę o nazwie „kontakty” i podać zarówno swoim klientom, jak i dostawcom identyfikatory contact_id.
Jeśli twój system zawiera tabelę referencyjną (na przykład coś, co kupujesz od dostawcy danych) zawierającą wiersze (kod pocztowy, miejscowość, województwo), możesz jej użyć do wypełnienia tabeli adresów. Ale powinieneś unikać zmuszania swoich adresów do zawierania tylko zakodowanych na stałe kodów pocztowych:te tabele referencyjne bardzo szybko się dezaktualizują.