如何建模地理零售位置层次结构



我正在尝试为零售公司的位置创建基础是商店的位置的数据库结构,而区是一组由地理位置分组的商店,依此类推。从最大到最小的(区域明智(,它进行了:

区域 ->区域 ->区 ->商店

每个级别都有相同的基本列:

ID
Name
LeaderID
CreatedOn
UpdatedOn
Active

最好将每个级别的每个级别都放在自己的表格中,还是将其凝结到一个" parenterlocation"列的"位置"表中?因为上层次结构将需要多次加入层次结构以来,会有明显的性能吗?

您需要一个与父母关系的表格,只要您为联接字段创建适当的索引,性能就不会受到影响。

Area: { area_id (pk), area }
Region: { region_id (pk), area_id (fk), region }
District: { district_id (pk), region_id (fk), district } 

然后,您的Store表将有一个更具体的位置的引用。

Store: { store_id (pk), district_id (fk), <other store fields>}

如果您想从某些特定区域的商店加入所有表

 SELECT S.*
 FROM Stores S
 JOIN District D ON S.distric_id = D.distric_id
 JOIN Region R on D.region_id = R.region_id
 JOIN Area A on R.area_id = A.area_id
 WHERE A.area = 'some area'

编辑:也许我向后理解地理位置。对于我的例子,我认为区域是较大的几何形状,区域是较小的区域。

最好拥有一个位置表并具有父级位置列。

至于树的遍历,有很多方法可以处理不同的情况。基本答案将取决于您在表中拥有多少数据以及如何使用它。

您所拥有的一些不同的选项是:

  1. 创建一个路径索引(例如Areaid | regionid | district(
  2. 递归穿越树
  3. 自我加入

我确定还有其他,因为这不是一个完整的列表,但是您要做的就是创建一些测试指标,然后决定最适合您的问题。

相关内容

  • 没有找到相关文章

最新更新