日期:2014-05-20  浏览次数:20690 次

关于联动的数据库设计
我想知道这种需求一般数据库上如何设计!
现在想安排一个街道名在某省某市某区
我的想法是
  省建一张表 (id1 ,name)
  市建一张表(id2,id1,name)
  区建一张表(id3,id2,name)
  街道名一张表(id4,id3,name)
我觉得这样设计相当的别扭,比如我要查某个街道属于某个省,要关联好多查询。

------解决方案--------------------
另一种做法是采用层级编码,比如:

省市区街
01010101

行政区编码,行政区名称,行政区级别,行政区级别简称
01, 北京市, 1, 省
0101,北京市海淀区,2,市
02,广东省,1,省
0201,广东省广州市,2,市


------解决方案--------------------
其实这个的做法用一张表就可以了,表结构是这样的,id(主键Id),名称(行政区名称),行政区域代码,Pid(该区域的上一级区域的Id),你可以好好的研究一下我们国家的行政区域代码,他是有规律的。例如:53010200800200100,代表的是云南省昆明市五华区黑林铺街道办事处海源社区,那么代码的前2位53代表了该区域所属的行政省,前4位5301代表了所属的“州、市”,前6位则代表所属的“县、区”,前9位则代表了所属的“乡镇、街道”,最后的三位如果是“100”则代表“社区”,如果是“200”则代表“村”
------解决方案--------------------
就是食品类(1,菜,01)
熟食类(1,熟牛肉,0101,1)
可是如果这个总类代码发生变化成02,那分类下面的代码也要全部更新0201。很纠结,这样实现好像有点...


有关这个,代码这个感觉可以随意,但是最好还是不变,如果要变的话,就把后面的父节点ID变成你改动的那个不就可以了,就是食品类(1,菜,01)改动的时候,把下面所有子节点的父节点那个属性,全部update