In my experience, you need a country, state, city, zip code, address.
Only the first three / four are convenient for filtering users. Enum fields are very suitable for the first two. The following two options are perfectly tested using the APIs - this saves you from having to maintain a list of valid values.
I have not yet encountered any system (although I assume that the post office will need it along with geolocation), which requires that the address part be divided into separate parts of the data for more accurate filtering - plus each user has his own way input last.
Keep in mind that in some countries there is no state; that others do not have zip codes; and that postal code formats vary widely from country to next.
Also keep in mind that even if a user can have multiple addresses on your system, the last thing you want is to associate multiple users with the same id_address. They are usually better placed as information about users (or their company) or related 1-n details; never nn. When not, the user interface quickly penetrates it, and someone will constantly change the address of user B by mistake, because the latter has the opportunity to share it with user A.
source share