最新在开发中用到了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[].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的优势还是很明显的。

通过EasyUI Tree说明SQL GUID和自增列ID的使用场景的更多相关文章

  1. SQL GUID和自增列做主键的优缺点

    我们公司的数据库全部是使用GUID做主键的,很多人习惯使用int做主键.所以呢,这里总结一下,将两种数据类型做主键进行一个比较. 使用INT做主键的优点: 1.需要很小的数据存储空间,仅仅需要4 by ...

  2. SQL Server数据库sql语句生成器(SqlDataToScript)的使用(sql server自增列(id)插入固定值)

    SqlDataToScript是根据表数据进行生成 Insert Into语句,此工具还有一个好处是可以对自增列插入固定值,例如:自增的列id值为5,但是5这个行值已经删除,如果想存储Id自增列值为5 ...

  3. SQL 如何在自增列插入指定数据

    SQL Server  中数据表往往会设置自增列,常见的比如说 首列的ID列. 往数据表插入新数据的时候,自增列是跳过的,无需插入即会按照设置的自增规则进行列增长.那么,如果我们想往自增列插入我们指定 ...

  4. 一句SQL实现获取自增列操作

    @@IDENTITY返回最后插入的标识值. 语法@@IDENTITY 返回类型numeric 注释在一条 INSERT.SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含此语 ...

  5. sql server 修改表自增列的值

    Create PROCEDURE [dbo].[SP_UpdateIdentityId] ( ) , @beforeId INT , @afterId INT ) AS BEGIN IF @befor ...

  6. SQL 2005 带自增列 带外键约束 数据导入导出

    1,生成建表脚本 选中要导的表,点右键-编写表脚本为-create到  ,生成建表脚本 2,建表(在新库),但不建外键关系 不要选中生成外键的那部分代码,只选择建表的代码 3,导数据,用SQL STU ...

  7. SQL Server获取自增列下一个Id

    IDENT_CURRENT('TableName')为当前的最大标识值,IDENT_INCR('TableName')为设置的标识值增量, 两者相加即为下一个标识值 SELECT IDENT_CURR ...

  8. sql server 获取自增列下一个值或者获取指定表的主键值

    IDENT_CURRENT('TableName')为当前的最大标识值, IDENT_INCR('TableName')为设置的标识值增量, 两者相加即为下一个标识值 如: SELECT IDENT_ ...

  9. 【原】无脑操作:EasyUI Tree实现左键只选择叶子节点、右键浮动菜单实现增删改

    Easyui中的Tree组件使用频率颇高,经常遇到的需求如下: 1.在树形结构上,只有叶子节点才能被选中,其他节点不能被选中: 2.在叶子节点上右键出现浮动菜单实现新增.删除.修改操作: 3.在非叶子 ...

随机推荐

  1. 初学android的第一个习作

    首发:个人博客,更新&纠错&回复 项目源码在这里,因为github上传速度太差,传到了oschina的git托管上. 1.项目结构及技术点 主页面使用FragmentTabHost,5 ...

  2. 非常好!!!【从头开始写操作系统系列】实现一个-GDT(1)【转】

    转自:http://blog.csdn.net/luoyhang003/article/details/47338019 权声明:本文为博主原创文章,未经博主允许不得转载.(文章来源:http://b ...

  3. Linux设备模型(9)_device resource management ---devm申请空间【转】

    转自:http://www.wowotech.net/linux_kenrel/device_resource_management.html . 前言 蜗蜗建议,每一个Linux驱动工程师,都能瞄一 ...

  4. js获取IP地址方法总结_转

    js代码获取IP地址的方法,如何在js中取得客户端的IP地址.原文地址:js获取IP地址的三种方法 http://www.jbxue.com/article/11338.html 1,js取得IP地址 ...

  5. How to create UrlSlug in Asp.Net MVC

    转自:http://www.ehsanghanbari.com/Post/20/how-to-create-urlslug-in-aspnet-mvc UrlSlug Is a way of gene ...

  6. Docker第三方项目小结

    软件项目的成功常常根据其催生的生态系统来衡量.围绕或基于核心技术构建的项目增添了功能和易用性,它们常常日臻完善.Docker就是一个典例,有众多第三方项目扩展.补充或改进Docker. •Docker ...

  7. PHP序列化以及反序列化系列[1]--PHP序列化格式的写法

    反序列化:对单一的已序列化的变量进行操作,将其转换回 PHP 的值(zval). PHP序列化方式 PHP在序列化的时候会将相应的变量以对应的键值进行储存. 将一个类序列化的话,处理代码主要的 文件: ...

  8. 9、Http回顾/Servlet

    1 Http回顾 Http协议: 1)http协议: 对浏览器客户端和服务器端之间数据传输的格式规范. 2)http请求:浏览器->服务器端 格式: 请求行(请求方式(GET/POST) 请求资 ...

  9. Python基础第一篇

    一.第一句python代码 1.python执行过程:1.加载内存-词法分析-语法分析-编译-执行 2.创建hello.py文件,输入内容 #!/usr/bin/env python print &q ...

  10. java面试每日一题9

    题目:判断一个数是否是2的方次幂 public class Power { public static void main(String [] args) throws NumberFormatExc ...