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

 

时间: 2024-09-20 04:18:20

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

SQL server 创建自增列

     一,企业管理器中创建自增列      选择要创建自增列的表,然后右击选择设计,创建一列          然后在下面的表属性里:   将标识规范里的(是规范)改为是,设置标识增量(每行增加多少)和标识种子(从多少开始增加),此处都写1就行. 保存.   二,使用T-SQL语句 alter table 表名 add 列名 int IDENTITY(1,1) NOT NULL           这里用到了identity关键字:indentity(a,b),a b均为正整数,a表示开始数

SQL SERVER 自增列_MsSql

declare @Table_name varchar(60) set @Table_name = ''; if Exists(Select top 1 1 from sysobjects           Where objectproperty(id, 'TableHasIdentity') = 1             and upper(name) = upper(@Table_name)         )     select 1else select 0 -- or if Ex

EasyUI Tree+Asp.net实现权限树或目录树导航的简单实例

 本篇文章主要是对EasyUI Tree+Asp.net实现权限树或目录树导航的简单实例进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助  代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Main.aspx.cs" Inherits="Manage_Main" %>   <!DOCTYPE html PUBLIC "

easyui tree带checkbox实现单选的简单实例_javascript技巧

实例如下: <ul id="regionTree"></ul> $('#regionTree').tree({ cascadeCheck: false, //onlyLeafCheck: true, checkbox: true, data: [{ "id": 1, "text": "My Documents", "children": [{ "id": 11,

easyui tree-springmvc+easyUI tree的完整的demo

问题描述 springmvc+easyUI tree的完整的demo 跪求大神帮忙传份springmvc+easyUI tree的完整的实例! 解决方案 http://blog.163.com/xueling1231989@126/blog/static/102640807201342725732691/http://www.tuicool.com/articles/amqeMj 解决方案二: 这里有个实例源码:http://download.csdn.net/detail/chenqk_123

实例-easyui tree怎么使用的?我需要把一张表以tree的形式加显示,求大神帮忙

问题描述 easyui tree怎么使用的?我需要把一张表以tree的形式加显示,求大神帮忙 easyui tree怎么使用的?我需要把一张表以tree的形式加显示,求大神帮忙.最好有实例给我看,我对easyui不是太熟,正在学习中.谢谢 解决方案 http://www.open-open.com/lib/view/open1390877623289.html 看看这个例子吧,希望对你有帮助. 解决方案二: http://www.jeasyui.net/demo/409.html 多看api,多

easyui tree树控件动态插入的html代码会失去渲染?

问题描述 easyui tree树控件动态插入的html代码会失去渲染? HI, RT, 问题描述:试图通过ajax向后台发送请求,服务端返回已经拼接好的 列表(树形控件的叶子结点和子节点), 前台回调函数拿到返回值后插入到树形控件ul标签里,但是没有样式(即没有被渲染). 脚本如下: $(document).ready(function () { $.post('/test.ashx', { 'action': 'getNodes' }, function (data, textStatus)

easyui tree 子节点选中时,父节点也要选中如何实现

问题描述 easyui tree 子节点选中时,父节点也要选中如何实现 使用easyui tree时,希望实现只要有某一个子节点被选中时,父节点也要被选中, 因为按照其默认实现,只有所有的子节点都选中了,父节点才会被打勾,而且在 提交时还不会被提交到后台,这样满足不了我的需求,我希望做到,只要有一个 子节点被选中,父节点都会被选中并在提交时提交到后台,求如何实现 解决方案 机器人的方法可以,但是需要配置cascadeCheck为false,要不勾选子节点后会导致多有节点被勾选 解决方案二: on

EasyUI Tree+Asp.net实现权限树或目录树导航的简单实例_实用技巧

复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Main.aspx.cs" Inherits="Manage_Main" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR