问题相对比较长,加上我的表达能力实在有点...请大家见谅,不过如果仔细读读还是可以读懂的,这样的结构估计各位以后也能用到。
有解决办法的给出解决办法。没做过这样的模型的,如有想法也好,说出你的想法。
兄弟这里谢谢了!!!!这个问题是关于对一个树形结构建模的问,我实在不知道应该怎么建立这样的数据模型。
使其高效通用。具体形式如下
这里那学校作为一个实例XXXX大学   
   --数学系       
       --95级           
            --1班
            --2班
            --3班
            --4班
       --96级
       --97级
       --98级
   --历史系
   --英语系
   --体育系以上是学校简单的示意结构
这样一个树形结构存储到不是大问题,这样的结构很容易在网上找到例子,但这些例子仅仅考虑了这树形结构,而没考虑这个树形结构的应用,有些时候我们不仅仅需要存储一个树形就了事了,世界就是这么复杂。
好说道正题。
以上是学校的结构,那么学生就是组成学校的最基本单位。如学生A属于上面
XXXX大学   --数学系       --95级            --1班的一名学生
如学生B属于上面
XXXX大学   --数学系       --95级            --2班的一名学生A,B都属于95级的
数学系也有学生是(C..N)学生属于该系,可能是各个年级,各个班级。当然所与的学生集合都是这个大学的学生对于这个模型的困惑我的是,如果我想要查询所有数学系学生
我该以怎样的方式查找呢,遍历所以数学系年级,各个年级的班,来查找学生么
这样效率是不是太低了呢,有可能说那你就在学生表里面记录住这个学生
属于 X班-X级-X系-X大学不就可以了么
但这个例子仅仅4级,如果更多级别分布呢
大家都熟悉的行政区域划分
国-省-地区-市-地市-区\县-乡\镇-村-组
这样一个结构,那么这个人的记录上面就记录所有这么一个列表么。对于这个结构我有一个自己想出来的办法
在数形结构上作想办法,也就是树形结构上的节点Id采用数字,按级别划分这个数字类型选择要够长度因为要表示N级
1
  101
     10101
  102
     10101
2
3
4
99
  9901
      990101以上这个结构,如果拿学生的那个例子来说
我记得990101的99就知道是什么系01就知道是什么年级,在下面的01就知道是什么班机的了这个ID当然也可以是字符串或其他的类型(这也是讨论的问题到底用怎样地类型作Id)呢在这里请大家就这样一个类型讨论一下应该采用什么办法,大家还有没有更好的办法呢
因为上面的2位分级作为一个级别的方法,也就预先规定死了,一个级别的元素做多不能超过99个。

解决方案 »

  1.   

    对于处理这种结构,目前大部分也是采用你说的那两种方法,至于具体采用哪种还要看具体的情况
    第一种:采用有意义的标识字段.
      就是用标识字段的各个部分表示所属级别,这种方法很适合于层次结构比较清脆或可以枚举的,
    这种方法的优点是查询方便.生成树型结构也比较快.缺点是结构不灵活,改动结构比较麻烦.
      如上面的学校结构就可以将标识字段: AAABBCCDDD AAA表示学校,BB表示院系,CC表示班级.
    DDD表示学生在班级里的编号
    这种方法还有一种变化的形式,就是为每级建立一个字段,这样它的优点和缺点就更加突出.
    第二种:采有链式表结构
      这种结构不需要有意义的标识字段,他是在自身里指定上级对象.这种结构灵活(理论上可以实现无穷级),查找不方便.当然事件应用中可以将两种方法交叉使用.
      

  2.   

    这个问题我也同样遇到。
    我的解决方法:
    以字符作为每一级的ID,例如:
    AAAAAA
    AAAAAB
    AAAAAC
    ...
    ...
    zzzzzz
    当然我只是用了A--z,还可以使用更多的字符,每一个字符可以作为一级的编码。使用like就可以查到任一级的学生。
      

  3.   

    to xhh_88(三友) 
    您描述的是我问题的前半部分,也就是树形结构,这个我采用的是您说的链式结构
    但这个树仅仅是一个区域性划分的概念,关键这个树还要挂在学生,您仔细看下面
    就了解了,学生分配在各个区域概念中,但同时属于月根根区域-子区域-孙区域...
    树形遍历还好,那么学生这个具体情况查询问题就比较复杂。to cuilj(一云忆水) 
    你的意思和1-99的意思差不多,而且也有一定的范围字符有限我的方法还是讲讲的好对于学生我采用的是从根到稍的记录
    具体记录方式
    87339-113-10-11
    用-作分割符这样的做法好处是查询就像你说的一样like xx=87339-这样就把所有87339这节点下面的所有学生列出来了。
    不知道这个方法是否好
      

  4.   

    当我刚看完问题就想到了分割符,但是楼主已经想到了,这里就不多说了,不过可否再加一项
    就是项目序号比如  1384A|1458B|3321101C|1332D|,这样处理后可以进一步精简查询比如:
    A代表省份B代表县C代表镇D代表村,假如你要查河南省山旮旯镇的所有村民条件可以这么写
    x like '1384A|%B|3321101C|%',不知道这样如何?