最新在开发中用到了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. mysql的sql文件的备份与还原

    1.备份 $mysqldump –u root –p*** dbname > filename.sql 2.还原 前提是数据库必须存在 $mysql  –u root –p*** dbname ...

  2. oracle 日期问题

    共三部分: 第一部分:oracle sql日期比较: http://www.cnblogs.com/sopost/archive/2011/12/03/2275078.html 第二部分:Oracle ...

  3. Oracle 行迁移和行链接

    一.行迁移 1.1.行迁移概念 当一个行上的更新操作(原来的数据存在且没有减少)导致当前的数据不能在容纳在当前块,我们需要进行行迁移.一个行迁移意味着整行数据将会移动,仅仅保留的是一个转移地址.因此整 ...

  4. Oracle将表keep到内存

    一.引言: 有时候一些基础表需要非常的频繁访问,尤其是在一些循环中,对该表中的访问速度将变的非常重要.为了提高系统的处理性能,可以考虑将一些表及索引读取并保存到内存中. 二.关于keep内存的几个参数 ...

  5. java利用zxing编码解码一维码与二维码

    最近琢磨了一下二维码.一维码的编码.解码方法,感觉google的zxing用起来还是比较方便. 本人原创,欢迎转载,转载请标注原文地址:http://wallimn.iteye.com/blog/20 ...

  6. postgresql之ctid的浅谈

       ctid: 表示数据记录的物理行当信息,指的是 一条记录位于哪个数据块的哪个位移上面. 跟oracle中伪列 rowid 的意义一样的:只是形式不一样.    例如这有个一表test:查看每行记 ...

  7. char 型变量中能不能存贮一个中文汉字,为什么?

    char类型可以存储一个中文汉字,因为Java中使用的编码是Unicode(不选择任何特定的编码,直接使用字符在字符集中的编号,这是统一的唯一方法),一个char类型占2个字节(16比特),所以放一个 ...

  8. URL List

    wifi driver http://wenku.baidu.com/view/5fb275e9b8f67c1cfad6b85e.html http://wenku.baidu.com/view/a5 ...

  9. 【转】西门子数控系统中MMC、PCU、NCU、CCU简略介绍

    转载地址:http://cyj221.blog.163.com/blog/static/34194117201093005526170/ 2010-10-30 01:06:09|  分类: 机械制造 ...

  10. 最简单的C/S程序——让服务器来做加法

    还在写“Hello world!”式的单机程序吗?还在各种拖控件吗?是否自己都觉得有点low呢?来个质的飞跃吧!看看怎么让服务器帮咱做加法! 所谓C/S程序就是Client/Server程序,自然既包 ...