Dalam pandangan saya, Anda membuat ini terlalu rumit. Tidak perlu membuat skema alamat Anda terlalu dinormalisasi. Sebagian besar sistem yang saya lihat menangani beberapa alamat pelanggan memiliki tabel pelanggan seperti milik Anda, dan kemudian memiliki tabel alamat, sebagai berikut:
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
adalah kunci asing untuk customer
meja. Kunci utama adalah gabungan dari (customer_id
, address_ordinal
). primary
kolom true
jika alamatnya adalah yang utama.
Mengenai pertanyaan Anda tentang pemasok, Anda mungkin ingin membuat tabel umum yang disebut "kontak", dan memberikan id_kontak pelanggan dan pemasok Anda.
Jika sistem Anda berisi tabel referensi (mungkin sesuatu yang Anda beli dari pemasok data) yang berisi baris (kode pos, lokalitas, provinsi), Anda dapat menggunakannya untuk membantu mengisi tabel alamat Anda. Namun Anda harus menghindari memaksa alamat Anda untuk hanya berisi kode pos hard-code:tabel referensi tersebut cepat usang.