Modeling Geographic Locations in an Relational Database我正在设计一个联系人管理系统,并且遇到了有关以一致方式对地理位置建模的有趣问题。 我希望能够记录与特定人相关的位置(用于工作,学校,家庭等的邮寄地址)。我的想法是创建一个区域表,例如: 自治位置(例如国家/地区,例如美国)为其自身的父级的语言环境(ID,LocationName,ParentID)。 这样,我可以任意深度地嵌套"政治单位"("国家">"州">"城市"或"国家/地区">"州">"城市">"大学")。 一些查询必然涉及递归。 对于使用这种方案可能遇到的可预见问题,我将不胜感激。 您可能想看看Freebase.com这个站点,它已经就"位置"的含义以及在另一个位置包含一个位置的含义进行了公开讨论。这些问题可以引起很多讨论。 例如,存在明显的"地理嵌套",但是不那么明显的逻辑嵌套。例如,从严格的地理意义上讲,梵蒂冈城位于意大利境内。但这并不是政治上的嵌套。同样,如果您的用户位于一所大学的研究中心内,但又不在该大学的财产范围内,您是否对这种关系进行建模? 听起来对我来说是个好方法。在阅读您的文章时,我不清楚的一件事是"自己的父母"的含义-如果这是为了指示语言环境没有父母,那么最好使用null而不是其自身的ID。 我认为您可能对此想法有所怀疑。大多数系统都有一个原因,就是仅存储地址,可能还存储国家/地区表。这里有一些注意事项: 布朗克斯区中的地址是否将自治市镇作为层次结构中的一个级别?非合并区域中的地址会消除层次结构的"城市"级别吗?如何对大学内的地址与不在大学内的地址进行建模?您最终将得到一个参差不齐的层次结构,这将迫使您每次需要在应用程序中显示地址时都要遍历树。如果您有一个"通讯录"页面,那么对性能的影响可能很大。 我不确定您是否只有一个层次结构。布朗大学在罗得岛州普罗维登斯和罗得岛州布里斯托尔设有设施。唯一的干净解决方案是拥有一个双重层次结构,其中包含两个校园,每个校园在一个层次结构中分别属于各自的城市,但在另一个层次结构中均属于布朗大学。 (大学从根本上与政治地区不同。您不应该将它们混为一谈。) 邮政编码呢?一些邮政编码包含多个城镇,而另一些城市则分为多个邮政编码。并且(很少)一些邮政编码甚至跨越州际线。 (根据维基百科,至少...) 您将如何输入数据?当您考虑虚荣地址,某些街道的备用名称,不同的国际格式等时,通过解析常规格式的地址来构建数据库可能会很困难。我认为,分等级地输入每个地址都是PITA。 听起来您正在尝试在应用程序中为整个世界建模。您是否真的想要或需要维护一个可以想象包含世界上每个城市,州,省,邮政编码和国家的表格? (或者至少每个人都认识某个人?)我唯一能想到的是,该方案可以为您带来方便,但是如果您要这样做,我将州和国家/地区(或邮政编码)分别存储并从Google添加纬度和经度数据。 对极端的悲观主义感到抱歉,但是我本人已经走了这条路。从逻辑上讲,它美观大方,但在实践中效果并不理想。 这是一个非常灵活的架构的建议。立即警告:对于您实际需要的可能太灵活/太复杂
位置
位置组
LocationGroupLocation
我会仔细考虑一下,因为它可能不是必需的功能。 记住KISS原则(保持简单,愚蠢)。 对于地理位置,您可能希望将地址解析为纬度,经度数组(可能使用Google地图等)以计算邻近度等。对于地缘嵌套,我会选择KISS响应。 如果您真的想对其建模,则可能需要更通用的类型...国家->省->县->自治市镇->地点->城市->郊区->街道或邮政信箱->数字-> ->公寓等->机构(大学或雇主)->部门->细分1->细分n ...您确定不能做KISS吗? 我同意其他帖子,在这里您需要特别注意自己的要求。位置可能成为棘手的问题,这就是GIS系统如此复杂的原因。 如果您确定只需要一个基本的层次结构,我有以下建议:
我正在为全球用户建模应用程序,但我遇到了同样的问题,但是我认为这种方法可能已经在许多企业中使用。但是,为什么这个问题没有通用的解决方案?或者,这个问题是否可以作为起点的最佳解决方案,或者自从开始以来世界上任何人都需要考虑解决方案? |