zoukankan      html  css  js  c++  java
  • 通过EasyUI Tree说明SQL GUID和自增列ID的使用场景

    最新在开发中用到了EasyUI里面的Tree,通过API可以看到这个Tree的数据格式如下:

    其中ID比较重要,API也说了,最开始我考虑到GUID比自增ID多占用了一些空间,所以采用的自增ID,测试数据库结构如下:

    其中,表TB_Menu中的MENU_ID为标识列,步长值为1,表TB_MenuGroup中的MENU_GROUP_ID也为标识列,步长值为1,Menu_Group_ID为主外键关系,我在页面上需要将数据库中所有的菜单都加载出来供用户选择,首先加入测试数据:

    INSERT INTO TB_MENUGROUP VALUES('生产数据维护','测试1')
    INSERT INTO TB_MENUGROUP VALUES('工艺路线维护','测试2')
    INSERT INTO TB_MENUGROUP VALUES('系统报表','测试3')
    
    INSERT INTO TB_MENU VALUES('PMC计划',1,'Plan.aspx')
    INSERT INTO TB_MENU VALUES('工序维护',2,'RouteStep.aspx')
    INSERT INTO TB_MENU VALUES('不良报表',3,'Defects.aspx')

    那么返回的结果如下:

    SELECT  A.MENU_GROUP_ID,A.MENU_GROUP_NAME,B.MENU_ID,B.MENU_NAME FROM TB_MENUGROUP A JOIN TB_MENU B
    ON A.MENU_GROUP_ID=B.MENU_GROUP_ID ORDER BY 1

    先看一下程序里面页面效果:

    PS:截图的时候之前的旧数据已经被清掉了,测试数据是后来增加进去的,只要能表达意思即可。

    从上图可以卡的出来每一个MenuGroup都是父节点,而Menu都是主节点,但是这个Tree里面每一个节点必须有一个不重复的ID,这下问题来了,MENU_GROUP_ID和MENU_ID都有1,2,3,4;那这样就会重复,我在程序中增加父节点的数据格式如下:

    json += "{"id":"" + i.ToString() + "","state":"closed","iconCls":"icon-hq","text":"" + ds.Tables[1].Rows[i]["MenuGroupName"].ToString() + "","; //这里增加父节点

    这是在一个循环里面,所以ID我用i.ToString()来实现,但是这样仍然会重复,因为循环的i也是从0开始的阿拉伯数字,也会跟MENU_ID重复,导致的问题就是明明我这个id对应的是子节点,但是在json里面却有一个相同的父节点,这样就导致选取Tree节点的时候出问题(明明没有选择,可以系统自动给你选择那些id重复的节点),重复的时候数据如下:

     

    ID=4 的数据本来应该是FunctionID,但是在图2上面显示MENU_GROUP_ID也是4。

    根据这个例子可以看的出来,GUID在某些场合确实实用一些,“唯一”是它最主要的优点,更改ID列的类型之后重新插入数据,内容如下图:

    试试GUID和IDENTITY各有各的好处,GUID只是比IDENTITY占空间一点,话说现在硬盘这么便宜,不在乎这点点空间吧,不如数据量太大到了以亿为单位的时候,GUID的优势还是很明显的。

  • 相关阅读:
    Java操作PDF之iText超入门
    Bootstrap 总结
    使用iframe框架后的页面跳转时目标页面变为iframe的子页面的问题
    Alluxio/Tachyon如何发挥lineage的作用?
    (转载)Zab vs. Paxos
    mysql批量数据导入探究
    读技术性文本的技巧
    Spark设计思想浅析
    MapReduce调优总结与拓展
    MapReduce 计算模式
  • 原文地址:https://www.cnblogs.com/allen0118/p/4153044.html
Copyright © 2011-2022 走看看