我正在开发一个项目,我需要在可变深度继承数据,然后能够返回特定数据片段的任何后代。我正在与地理区域合作,因此我正在考虑拥有一个“地区”表,并拥有从“北美”到个人社区的所有内容,例如“布朗克斯”。所以,如果有人输入“北美”,他们也应该收到“布朗克斯”的结果,因为“布朗克斯”是“北美”的后代通过这种关系
North America->United States->New York(State)->New York(City)->Bronx
在我的数据库中,我计划将Region表链接返回给自己,并使用一个表来指定Regions之间的父/子关系。这是我建议的一个例子:
非常感谢任何帮助!
答案 0 :(得分:0)
你不需要新桌子吗?主表中的外键就足够了。
这是我的方法:
第一个问题,设计数据架构:我将层次结构保留为父行的外键。这很简单。你有一个example with hiererchy regions here:
WOE_ID ISO Name Language PlaceType Parent_ID
20069843 "NA" "Oshana" ENG State 23424987
55921113 "NA" "Ondangwa" ENG County 20069843
...
第二个问题,检索后代/后代:正如您所解释的那样,问题来自于:选择一些区域和所有后代的后代。要解决此问题,您应该创建一个新的树表。此表包含对:与具有所有祖先(及其自身)的人的组合:
region( id, name, id_parent)
region_tree( id, id_ancestor, distance )
注意到使用此结构很容易查询层次结构。示例:某些地区的所有后代:
select region.*, distance
from
region p
inner join
region_tree t
on ( p.id = t.id)
where
id_ancesor = **someregion.id **
您可以使用距离来获取子区域,子子区域......
最后一个问题,保持树:树必须始终是数据。您应该自动执行此操作:触发region
或CRUD操作的存储过程