Theo quan điểm của tôi, bạn đang làm cho điều này quá phức tạp. Không cần thiết phải làm cho giản đồ địa chỉ của bạn được chuẩn hóa quá mức. Hầu hết các hệ thống mà tôi đã thấy xử lý nhiều địa chỉ khách hàng có một bảng khách hàng giống như của bạn, và sau đó có một bảng địa chỉ, như sau:
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
là khóa ngoại cho customer
bàn. Khóa chính là tổng hợp của (customer_id
, address_ordinal
). primary
cột là true
nếu địa chỉ là địa chỉ chính.
Đối với câu hỏi của bạn về nhà cung cấp, bạn có thể muốn tạo một bảng chung có tên là "địa chỉ liên hệ" và cung cấp cho cả khách hàng và nhà cung cấp của bạn contact_ids.
Nếu hệ thống của bạn chứa bảng tham chiếu (có thể là thứ bạn mua từ nhà cung cấp dữ liệu) chứa các hàng (mã bưu điện, địa phương, tỉnh), bạn có thể sử dụng bảng đó để điền bảng địa chỉ của mình. Nhưng bạn nên tránh buộc các địa chỉ của mình chỉ chứa các mã bưu điện được mã hóa cứng:các bảng tham chiếu đó rất nhanh lỗi thời.