日期:2014-05-16 浏览次数:20398 次
经典问题,刚好以前解决过,分享一下: 就是逻辑树,怎么存储的问题。
主要考虑点: 无限层次扩展 和 查询性能 矛盾的解决。
基本模式:
表:Location
?
编码 | 名称 | 父编码 |
CN | 中国 | ? |
ZJ | 浙江省 | CN |
HZ | 杭州市 | HZ |
XH | 滨江区 | HZ |
NB | 宁波市 | ZJ |
优点: 模型简约而不简单, 支持任意层次扩展。
缺点:查询一个节点的所有子节点需要递归,效率不高。
一般解决: Oracle 中有这个语句可以解决查询问题 select * from XXX start with id=76 connect by prior parentid=id。 但是数据量大时效率有影响。
更好的解决:用好Cache。 一般这类数据都比较固定,而且量不会非常大,使用Cache,无论是程序递归查询,还是 connect by prior 语句,问题都不大。
索引表支持
如果属性结构数据量比较大或变动频繁, 应用比较关注性能,可以增加一个索引表来解决
行政区划索引表 ( Location_Index ) ( 主键:ID, PID)
编码 | 上线编码(非父级(PID)) | 相差存次(offset) |
CN | ? | ? |
ZJ | CN | 1 |
HZ | CN | 2 |
HZ | ZJ |
免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
|