Skip to main content

Multi-country adress database design

MULTI-COUNTRY ADDRESS DATABASE DESIGN

http://danielcoding.net/multi-country-address-database-design/
https://stackoverflow.com/questions/929684/is-there-common-street-addresses-database-design-for-all-addresses-of-the-world


http://www.upu.int/uploads/tx_sbdownloader/productSheetPostcodesDatabaseEn.pdf

http://www.upu.int/en/resources/postcodes/universal-postcoder-database.html

Google Place Detail API reveal some useful about its data structure design, and sure it very cool.

https://maps.googleapis.com/maps/api/place/details/json?placeid=ChIJGzHG3iMT5TQRgQ6MsXnL7xQ&key=GG_KEY_HERE&language=ja

   "result" : {
      "address_components" : [
         {
            "long_name" : "8",
            "short_name" : "8",
            "types" : [ "premise" ]
         },
         {
            "long_name" : "6",
            "short_name" : "6",
            "types" : [ "sublocality_level_4", "sublocality", "political" ]
         },
         {
            "long_name" : "1丁目",
            "short_name" : "1丁目",
            "types" : [ "sublocality_level_3", "sublocality", "political" ]
         },
         {
            "long_name" : "北前",
            "short_name" : "北前",
            "types" : [ "sublocality_level_2", "sublocality", "political" ]
         },
         {
            "long_name" : "北谷町",
            "short_name" : "北谷町",
            "types" : [ "sublocality_level_1", "sublocality", "political" ]
         },
         {
            "long_name" : "北谷町",
            "short_name" : "北谷町",
            "types" : [ "locality", "political" ]
         },
         {
            "long_name" : "中頭郡",
            "short_name" : "中頭郡",
            "types" : [ "administrative_area_level_2", "political" ]
         },
         {
            "long_name" : "沖縄県",
            "short_name" : "沖縄県",
            "types" : [ "administrative_area_level_1", "political" ]
         },
         {
            "long_name" : "日本",
            "short_name" : "JP",
            "types" : [ "country", "political" ]
         },
         {
            "long_name" : "904-0117",
            "short_name" : "904-0117",
            "types" : [ "postal_code" ]
         }
      ],
...

https://maps.googleapis.com/maps/api/place/details/json?placeid=ChIJfR8jHkRZwokRgllkzTBqhlM&key=GG_KEY_HERE&language=ja

    "result" : {
      "address_components" : [
         {
            "long_name" : "727",
            "short_name" : "727",
            "types" : [ "street_number" ]
         },
         {
            "long_name" : "Manhattan Avenue",
            "short_name" : "Manhattan Ave",
            "types" : [ "route" ]
         },
         {
            "long_name" : "Greenpoint",
            "short_name" : "Greenpoint",
            "types" : [ "neighborhood", "political" ]
         },
         {
            "long_name" : "Brooklyn",
            "short_name" : "Brooklyn",
            "types" : [ "sublocality_level_1", "sublocality", "political" ]
         },
         {
            "long_name" : "Kings County",
            "short_name" : "Kings County",
            "types" : [ "administrative_area_level_2", "political" ]
         },
         {
            "long_name" : "New York",
            "short_name" : "NY",
            "types" : [ "administrative_area_level_1", "political" ]
         },
         {
            "long_name" : "アメリカ合衆国",
            "short_name" : "US",
            "types" : [ "country", "political" ]
         },
         {
            "long_name" : "11222",
            "short_name" : "11222",
            "types" : [ "postal_code" ]
         }
      ],
...

address_components data contain a list of address properties, each have same structure:
{
  long_name:  => string
  short_name: => string
  types: [] => array/list
}

This is a clever design.
And one of another params is "lang=ja", so long_name property have been translated to language:
ie. US => "アメリカ合衆国"


Digging in to this lib for finding out how J2ME port to Android. I think It is simple because of both use Java but not sure about this. I have tried (at least have an idea) on using LibGDX to build a wrapper around J2ME and It seem not difficult. The most challenge path is the EXCEPTIONS, it's everywhere. For example, a J2ME game using binary image/photo (binary concat like css sheet) for memory saving... It is may not a special way of working but with me it is not familiar and when port to LibGDX/Android I have to handle it.

https://github.com/nikita36078/J2ME-Loader/blob/master/app/src/main/java/org/microemu/microedition/ImplFactory.java

Oh England as Province (yeah it have Scotland, Wales ... in GB or UK?)
GB           | イギリス              | SE1 9AF     |         | NULL     | England               | Greater London

This post mentioned about country_code used in ID (key),
https://stackoverflow.com/questions/3455297/mysql-using-string-as-primary-key
I am confused on choose use it or not, for example:
area_id = GB001 mean Great Britain London...
JP47 mean okinawa pref.

MySQL JSON real use case
https://medium.com/aubergine-solutions/working-with-mysql-json-data-type-with-prepared-statements-using-it-in-go-and-resolving-the-15ef14974c48

Comments