通過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的優勢還是很明顯的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM