通向架构师的道路06(第六天)之漫谈基于数据库的权限系统的设计(4)

2020-02-20 15:28

我们现在有:报表查询,系统管理两大菜单,我们还想加一个菜单:保单审核,怎么来做? 我们把4.2节中“如何在现有节点中插入新的子节点”里四步公式,稍稍改动一下 第一步:选取要被插入新的节点左边节点的rgt的值 第二步:原有的数据中所有的rgt如果>第一步中得到的rgt的值,那么全部+2 第三步:原有的数据中所有的lft如果>第一步中得到的rgt的值,那么全部+2 第四步:将插入的节点的lft与rgt的设计,新节点的lft =第一步中的rgt+1,新节点的rgt=第一步中 的rgt+2 下面来看我们在“报表查询”与“系统管理”中间,插入一个菜单叫“保单审核”。 第一步 SELECT rgtFROM t_sys_menuwhere menu_id='101'; 这一步我们得到的值为:11 第二步: UPDATE t_sys_menuSET rgt = rgt +2WHERE rgt >11; 第三步: UPDATE t_sys_menuSET lft = lft +2WHERE lft >11; 第四步: INSERTINTO t_sys_menu(menu_id, menu_descr, menu_url, lft, rgt)VALUES('114','保单审核','', (11+1), (11 +2)); 运行下面的SQL语句我们来检查一下插入的效果: SELECT node.menu_id menuId, node.menu_descr menuDescr, node.lft, node.rgt, node.menu_url menuUrl, (COUNT(parent.menu_id)-1) menuLevel, node.menu_pid pid FROM t_sys_menu node, t_sys_menu parent WHERE

node.lftBETWEEN parent.lftAND parent.rgt AND node.menu_descr!='菜单'

GROUPBY node.menu_id,node.menu_descr,node.lft,node.rgt,node.menu_url,node.menu_pid

ORDERBY node.lft

怎么样,结果对了吧,呵呵!

看看整个菜单的右边界吧,从原来的26变成了28了,是不是哦?

1.3 如何删除一个节点

来看公式

第一步:选取要被删除的菜单的lft的值,rgt的值,以及宽度(width=rgt-lft+1); 第二步:删除所有的位于第一步中得到的lft与rgt之间的节点;

第三步:将所有的右边界大于第一步中得到的rgt的所有节点的rgt的值减去第一步中得到的width

第四步:将所有的左边界大于第一步中得到的rgt的所有节点的lft的值减去第一步中得到的width

来看实际例子,我们有下面这样的数据:

我们想将menu_id=114的保单审核删除,当然,这是一个父节点,如果把它删了,其子节点115即手工审核也必须被一起删除,要不然它就成为脏数据了是不是?套用上述四步公式: 第一步: SELECT lft, rgt, (rgt - lft +1) widthFROM t_sys_menuWHERE menu_id ='114' 第二步: DELETEFROM t_sys_menuWHERE lftBETWEEN12AND15 第三步: UPDATE t_sys_menuSET rgt = rgt -4WHERE rgt >15 第四部: UPDATE t_sys_menuSET lft = lft -4WHERE lft >15 全部步骤完成后,我们来运行检验的SQL: SELECT node.menu_id menuId, node.menu_descr menuDescr, node.lft, node.rgt, node.menu_url menuUrl, (COUNT(parent.menu_id)-1) menuLevel, node.menu_pid pid FROM t_sys_menu node, t_sys_menu parent WHERE node.lftBETWEEN parent.lftAND parent.rgt AND node.menu_descr!='菜单' GROUPBY node.menu_id,node.menu_descr,node.lft,node.rgt,node.menu_url,node.menu_pid ORDERBY node.lft 结果正确,再来看整个“菜单”的边界,从原来的28缩减成了26了,结果正确。 上述这种基于lft, rgt左右值无限分类实现算法的个菜单的好处在于: ü SQL语句不受特定的数据库的限制 ü SQL语句通用 ü 直接从数据库中远取出来的结构化的数据即可满足需要pid的如:dtree.js这样的JS控件的需要也可以满足需要level的ajax tree控件的需要。


通向架构师的道路06(第六天)之漫谈基于数据库的权限系统的设计(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:数学建模大作业 - 人口问题讨论

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: