码迷,mamicode.com
首页 > 数据库 > 详细

通过EasyUI Tree说明SQL GUID和自增列ID的使用场景

时间:2014-12-09 13:56:14      阅读:347      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   color   os   使用   sp   on   

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

bubuko.com,布布扣

bubuko.com,布布扣

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

bubuko.com,布布扣

 

其中,表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

bubuko.com,布布扣

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

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

bubuko.com,布布扣

从上图可以卡的出来每一个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重复的节点),重复的时候数据如下:

bubuko.com,布布扣 bubuko.com,布布扣

 

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

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

bubuko.com,布布扣

 

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

 

通过EasyUI Tree说明SQL GUID和自增列ID的使用场景

标签:style   blog   http   io   color   os   使用   sp   on   

原文地址:http://www.cnblogs.com/allen0118/p/4153044.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!