数据库
首页 > 数据库> > mysql – 数据建模:地理位置的层次结构

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

作者:互联网

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

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

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

我认为问题是如果User-1和User-2都输入导致该国家为“USA”的地址,我想我需要知道User-1和User-2都来自美国 – 并且“USA”仅在DB中存储一次.

当用户搜索其他用户时,我想我应该只让他们在美国搜索用户,如果我实际上有来自美国的用户.这意味着,假设User-1和User-2是来自美国的唯一2个用户,如果User-1和User-2删除他们的个人资料,我不应该再允许在美国搜索用户.

我的想法在概念上是错误的吗?在任何情况下,我应该如何建模这些信息?我正在使用MySQL.

解决方法:

你的目标和意图是正确的(不要放弃它们!),你可能需要一些帮助来克服这条线,就是这样.您对数据建模和规范化的理解和经验越多,就越容易理解.所以做尽可能多的研究和锻炼(SO或网络不是学习任何东西的好方法).

>出于装载和维护目的,最好确保您拥有适用于地理位置的标准化自顶向下结构.您可以通过您的理事会,县或邮局提供的信息(通常是免费的)加载它.这将消除外部参考表的手动数据输入.

>这是一个高度标准化的数据模型,5NF.
>但是可以做更多的规范化;更多可以删除的重复.除非你真的感兴趣,否则它是不值得的,例如.你需要搜索LastNames等.
.
>这是一家公用事业公司,以确保潜在客户不提供虚假的街道位置.
>地址是特定的房屋或单元(公寓),并且不会重复.居住在同一地址的两个人将使用一个地址行.
>此结构处理“任何”地理位置.请注意,有些国家没有国家;有些国家没有县;一些城镇没有郊区;不是将所有这些异常构建到数据模型中,而是将层次结构保持为“干净”.您仍然需要在SQL中处理它(无论模型是否简单,没有例外,或者它是否有例外;因为这是现实世界),而不是为无状态国家显示State.您只需要一个非State状态的行,其StateCode为CHAR(0),用于标识条件.
>我已经放置了经度&在郊区级别的纬度,假设这是您的用户可以通过GoogleMaps轻松选择的,并且因为街道级别将具有限制(可能是细粒度,并且会导致重复;或者对于具有很长街道的城市而言不够精细) .容易改变.
>目前,我建议您不要担心在同一个国家/地区识别用户,首先看看您是否可以处理SQL来识别同一个郊区的用户(不是Street,这很容易).之后,我们可以处理城市,县,乡等.
>我认为您确定的其他搜索是毫不费力的;看你是否同意

无论如何,这只是让你入门的东西;在最终确定之前有一些互动.

Link to GLS Data Model(加上你的另一个问题的答案)

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

标签:mysql,database,database-design,data-modeling
来源: https://codeday.me/bug/20190606/1189299.html