mysql – 数据库设计:保存谷歌地图数据

见:
http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=false

我正在使用MySQL.

给定部分或完整地址,Google Map API将返回如下内容:

"address_components" : [
            {
               "long_name" : "1600",
               "short_name" : "1600",
               "types" : [ "street_number" ]
            },
            {
               "long_name" : "Amphitheatre Pkwy",
               "short_name" : "Amphitheatre Pkwy",
               "types" : [ "route" ]
            },
            {
               "long_name" : "Mountain View",
               "short_name" : "Mountain View",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Santa Clara",
               "short_name" : "Santa Clara",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "California",
               "short_name" : "CA",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "United States",
               "short_name" : "US",
               "types" : [ "country", "political" ]
            },
            {
               "long_name" : "94043",
               "short_name" : "94043",
               "types" : [ "postal_code" ]
            }
         ]

假设我正在开发一个应用程序,其中:

>帐户所有者可以指定他们的位置,和
>支持按位置搜索

我应该如何存储从Google获得的地址组件,以便我可以查询以下内容:

>特定国家/地区有多少帐户所有者?
>特定州有多少帐户所有者?
>特定邮政编码中的帐户所有者有多少?
>等

一种非常简单的方法是将单个地址组件存储在一个表中:

TABLE: account
- account_id (PK)
- street_number
- route
- locality
- administrative_area_level_2
- administrative_area_level_1
- country
- postal_code

我会留下空白的Google无法提供的任何信息(例如,如果帐户所有者未提供街道号码,那么Google API也不会返回street_number).我认为这是最简单的查询.但是,此数据不会正常化.

或者,我可以将数据库设计为具有多个表,例如:

TABLE: country
- country_id (PK)
- name

TABLE: administrative_area_level_1
- administrative_area_level_1_id (PK)
- country_id (FK)
- name

… 等等

这可能会使数据正常化,但查询可能会很麻烦.此外,缺少信息也可能导致一些问题.例如,如果Google返回country和administrative_area_level_2,则会跳过administrative_area_level_1(我不确定这是否可行)? administrative_area_level_2需要一个administrative_area_level_1_id作为其FK – 没有它,模型就会中断.

另一个想法可能是使用嵌套集或邻接模型.数据将被标准化,并且可能能够更好地处理丢失的信息.

我的直觉是,最简单的模型 – 允许冗余数据的模型 – 对我来说是最好的选择.数据不是来自我,它来自谷歌,我认为我只需要数据,所以我可以进行这些按位搜索.也许我不会遇到异常?

有关如何建模的任何建议?

最佳答案 在您开始担心如何为从Google地图检索的数据建模之前,您可能需要先查看服务条款,电话是
http://code.google.com/apis/maps/terms.html.

特别注意10.1.3(a):

“您不得复制,翻译,修改或创建衍生作品(包括创建或贡献数据库),或公开展示任何内容或其任何部分……”

我会说,几乎明确禁止你试图构建的那种应用程序.如果您想查询Google对您的某个帐户所有者的地址信息,则必须使用Google的API执行此操作 – 而不是复制其数据并在您自己的应用程序中执行此操作.

点赞