数据建模:地理位置的层次结构

Posted

技术标签:

【中文标题】数据建模:地理位置的层次结构【英文标题】:Data Modeling: hierarchy of geographic locations 【发布时间】:2010-11-24 00:46:35 【问题描述】:

我希望我的用户能够指定他们的位置,以便我可以将它们绘制在地图上。给定一个地址,我使用 Google Maps API 获取他们的纬度/经度坐标并将其存储在数据库中。

此外,我希望允许用户根据位置搜索其他用户。使用 Google Maps API,我还可以获得国家/州/城市的地址(或纬度/经度坐标)。我的问题是我不知道如何以如下方式存储国家/州/城市:

数据与特定用户相关联 没有数据冗余

我认为的问题是,如果用户 1 和用户 2 都输入了导致国家为“美国”的地址,我想我需要知道用户 1 和用户 2 都来自美国 - - 而且“USA”在数据库中只存储一次。

当用户搜索其他用户时,如果我确实有来自美国的用户,我认为我应该只让他们搜索美国的用户。意思是,假设用户 1 和用户 2 是来自美国的仅有的 2 个用户,如果用户 1 和用户 2 删除他们的个人资料,我不应该再允许搜索美国的用户了。

我的想法在概念上是错误的吗?无论如何,我应该如何建模这些信息?我正在使用 mysql

【问题讨论】:

【参考方案1】:

您的目标和意图是正确的(不要放弃它们!),您可能需要一些帮助才能越线,仅此而已。您对数据建模和规范化的理解和经验越多,它就越容易。因此,请尽可能多地进行研究和练习(所以,网络不是学习任何东西的好方法)。

    出于加载和维护目的,您最好确保具有标准化的、自上而下的地理位置结构。您可以从您的议会或县或邮局或其他任何地方提供的信息(通常是免费的)中加载它。这将消除外部参考表的手动数据输入。

    这是一个高度规范化的数据模型,采用 5NF。

    但是还有更多的标准化可以做;更多可以删除的重复。除非你真的很感兴趣,否则这是不值得的,例如。您需要搜索姓氏等。 .

    这是给公用事业公司的,以确保潜在客户不会提供虚假的街道位置。

    地址是特定的房屋或单元(公寓),并且它没有重复。住在同一地址的两个人将使用一个地址行。

    此结构处理“任何”地理位置。注意有些国家没有State;一些州没有县;一些城镇没有郊区;等等。我没有将所有这些异常都构建到数据模型中,而是保持层次结构“干净”。您仍然需要在 SQL 中处理它(无论模型是否简单且没有异常,或者是否有异常;因为那是真实世界),并且显示状态无国界。您所需要的只是用于标识条件的 StateCode 为 CHAR(0) 的非州行。

    我已将经度和纬度放在郊区级别,假设这是您的用户可以通过 GoogleMaps 轻松选择的内容,并且因为街道级别会有限制(可能是细粒度的,并且会导致重复;或对于街道很长的城市来说,粒度不够细)。易于更改。

    现在,我建议你不要担心识别同一个国家的用户,先看看你是否可以处理SQL来识别同一个郊区(不是街道,这很容易)的用户。之后,我们就可以处理City、Country、Country等了。

    我认为您确定的其他搜索很容易;看看你是否同意。

无论如何,这只是让您入门的东西;在最终确定之前需要进行一些互动。

Link to GLS Data Model(加上你其他问题的答案)

Link to IDEF1X Notation 适用于不熟悉关系建模标准的人。

【讨论】:

以上是关于数据建模:地理位置的层次结构的主要内容,如果未能解决你的问题,请参考以下文章

3.初识Verilog HDL

EJB3 和手动层次结构持久性

建模分层数据 - GAE

数据建模 经典教程

SSAS 2012 - 维度建模

数学建模 层次分析法