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的优势还是很明显的。

  • 相关阅读:
    2019-2020-1 20199324《Linux内核原理与分析》第七周作业
    2019-2020-1 20199324《Linux内核原理与分析》第六周作业
    2019-2020-1 20199324《Linux内核原理与分析》第五周作业
    介绍一个比较了各种浏览器对于HTML5 等标准支持程度的网站
    JaveScript 中的正则表达式
    Windows中查看进程的资源消耗(cpu, Disk,Memory,NetWork)
    Windows中通过命令行启动打开Service 管理工具
    删除Widows 启动项中的信息
    LAMP中添加多虚拟主机
    多线程的安全问题
  • 原文地址:https://www.cnblogs.com/allen0118/p/4153044.html
Copyright © 2011-2022 走看看