通过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的优势还是很明显的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?