我希望我的用户能够指定他们的位置,以便我可以在地图上绘制它们。给定地址,我使用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。
答案 0 :(得分:6)
你的目标和意图是正确的(不要放弃!),你可能需要一些帮助来克服这一切,就是这样。您对数据建模和规范化的理解和经验越多,就越容易理解。所以尽可能多地进行研究和锻炼(因此,网络不是学习任何东西的好方法)。
出于装载和维护目的,最好确保您拥有适用于地理位置的标准化自顶向下结构。您可以通过您的理事会,县或邮局提供的信息(通常是免费的)加载它。这将消除外部参考表的手动数据输入。
这是一个高度标准化的数据模型,为5NF。
但是可以做更多的规范化;更多可以删除的重复。除非你真的感兴趣,否则它是不值得的,例如。你需要搜索LastNames等。
这是针对公用事业公司的,以确保潜在客户不提供虚假的街道位置。
地址是特定的房屋或单元(公寓),并且不会重复。住在同一地址的两个人将使用一个地址行。
此结构处理“任何”地理位置。请注意,有些国家没有国家;有些国家没有县;一些城镇没有郊区;不是将所有这些异常构建到数据模型中,而是将层次结构保持为“干净”。您仍然需要在SQL中处理它(无论模型是否简单,没有例外,或者它是否有异常;因为这是现实世界),而不显示状态为无国家的国家。您所需要的只是一个非State状态的行,其中StateCode为CHAR(0),用于标识条件。
我已经放置了经度&在郊区级别的纬度,假设这是您的用户可以通过GoogleMaps轻松选择的,并且因为街道级别将具有限制(可能是细粒度,并且会导致重复;或者对于具有很长街道的城市而言不够精细) 。易于改变。
目前,我建议您不要担心识别同一个国家/地区的用户,首先看看您是否可以处理SQL来识别同一个郊区的用户(不是Street,这很容易)。之后,我们可以处理城市,县,国家等。
我认为你认出的其他搜索是毫不费力的;看你是否同意。
无论如何,这只是让你入门的事情;在最终确定之前会有一些互动。
Link to GLS Data Model(加上你的另一个问题的答案)
Link to IDEF1X Notation适用于那些不熟悉关系建模标准的人。