如何建立地理零售地点的层次结构

时间:2017-05-05 19:59:02

标签: sql-server database schema

我正在尝试为存储基地的零售公司的位置创建数据库结构,而区域是按地理位置分组的商店组等。从最大到最小(区域明智)它是:

区域 - >地区 - >区 - >店

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

ID
Name
LeaderID
CreatedOn
UpdatedOn
Active

将这些级别中的每一个放在他们自己的表中,或者将其压缩到一个地点'更好吗?表格中有一个“父母位置”'柱?是否会出现明显的性能损失,因为上层次结构需要多次加入同一个表?

1 个答案:

答案 0 :(得分:1)

您需要一个具有父子关系的级别表,只要您为连接字段创建正确的索引,性能就不会受到影响。

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'

编辑:也许我向后了解地理位置。对于我的例子,我假设Area是较大的几何,而District是较小的几何。