我正在尝试为存储基地的零售公司的位置创建数据库结构,而区域是按地理位置分组的商店组等。从最大到最小(区域明智)它是:
区域 - >地区 - >区 - >店
每个级别都有相同的基本列:
ID
Name
LeaderID
CreatedOn
UpdatedOn
Active
将这些级别中的每一个放在他们自己的表中,或者将其压缩到一个地点'更好吗?表格中有一个“父母位置”'柱?是否会出现明显的性能损失,因为上层次结构需要多次加入同一个表?
答案 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是较小的几何。