Podle mého názoru to děláte příliš složité. Není nutné, aby bylo vaše schéma adres příliš normalizováno. Většina systémů, které jsem viděl a které zpracovávají více zákaznických adres, má tabulku zákazníků, jako je ta vaše, a poté má tabulku adres takto:
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
je cizí klíč pro customer
stůl. Primární klíč je složen z (customer_id
, address_ordinal
). primary
sloupec je true
pokud je adresa primární.
Pokud jde o vaši otázku ohledně dodavatelů, možná budete chtít vytvořit společnou tabulku nazvanou „kontakty“ a přidělit zákazníkům i dodavatelům kontaktní_id.
Pokud váš systém obsahuje referenční tabulku (možná něco, co zakoupíte od dodavatele dat) obsahující řádky (PSČ, lokalita, provincie), můžete ji použít k naplnění tabulky adres. Měli byste se však vyvarovat toho, aby vaše adresy obsahovaly pouze pevně zakódovaná PSČ:tyto referenční tabulky velmi rychle zastarají.