1
dreampuf 2014-04-18 12:38:27 +08:00
参考Linux 文件系统设计到了开头,发现太复杂设计不下去就甩锅了
|
2
rebornix 2014-04-18 12:41:00 +08:00
*inx可以用数字设置文件权限,我想这位设计的朋友一定领悟了其中的风采
|
3
mengzhuo 2014-04-18 12:52:37 +08:00
邮编转地区的设计方案?
------------------------------------------------------ 2、4、6、8表示(浏览、修改、添加、删除) Linux是用二进制的位来决定啊,这设计算个山寨货 1 = 1 可执行 2 = 10 可写 4 = 100 可读 所以 7 = 111 (可读、写、执行) ------------------------------------------------------- 因为没有parent_id,你只能用树来载到内存里用了。 |
4
gaicitadie OP @mengzhuo 就是这么搞得,用一个二维数组存放菜单树。展现还好,循环二维数组就可以了。排序累煞我也,如果有parent_id,直接一条sql语句就可以查出上一个菜单项和下一个菜单项。没有parent_id,只能用算法再从菜单树里寻找上一个和下一个菜单项,相关函数用了60行代码,一上午的工作量+中饭时间
|
5
towser 2014-04-18 22:23:12 +08:00
parent_id性能不太好,不过一般菜单也没多到需要考虑性能。
|
6
thankyourtender 2014-04-18 22:48:25 +08:00
掉坑里面了
|
7
gaicitadie OP @towser 那只是个后台啊,每天只有公司几个员工进去操作几下。还让我用缓存。。。
|
8
GTim 2014-04-19 00:23:31 +08:00
话说除了权限感觉不好看外没发现有啥不好的... 如果需要权限只要%10得到数字进行判断,如果要父id则直接根据前3位直接拼装,或者/1000取整*1000得到父id
|
9
gaicitadie OP @GTim 排序不如用parent_id方便,上移、下移操作用parent_id的话只需要 select * from Table where ... and parent_id=xxx order by order_number 来获取上一个或下一个的order_number。而现在的情况就有些复杂了,一级菜单和二级菜单的排序需要拼装不同的sql。
如果情况再多变一些,出现3级菜单的需求,这个架构基本上就得推倒重来了 |
10
xds2000 2014-04-19 04:44:14 +08:00
@gaicitadie 楼主可以给介绍一下MPTT
|
11
GTim 2014-04-19 08:20:29 +08:00 1
@gaicitadie 如果要3级菜单的确不好用,但可以在通过:(%10000)+(/10000*100000)来调整位数,达到前2位表示1级 中间2位表示2级,最后三位维持愿意不变。
如果根据parent_id来选择上一个和下一个菜单,可以直接先计算parent_id=int(id%10000)*10000 然后where的时候只要:>parent_id and < parent_id + 100000 因为后台菜单不会太多,为了不2次查询,直接select all出来然后foreach即可.缓存的话,就更不用说了.一个缓存保存顶级菜单id,剩下的缓存根据每个顶级菜单id保存次级菜单id 还好这里没有根据树来保存,不然你可能要哭了. 菜单问题,很久之前就有2套通俗的解决方案,选择只是个人偏爱和熟练度. 小公司数据库没有那么多诡异的需求,但大公司数据库,能不加字段是坚决不加字段的.加一个parent_id 说不定就造成了好几g的数据 对于磁盘上的每个page页,获取到的数据就更少了,那么磁盘io就会更多了 |
12
griffinqiu 2014-04-19 10:01:29 +08:00 via iPhone
两套结构各有利弊,楼主太矫情
|
13
gaicitadie OP @GTim 你说的那种情况不存在,再大的菜单不可能因一个paren_id就把数据库撑爆,就算parent_id有几g,那么数据库本身可能得有几万个T了,如果缓存起来,有parent_id一样可以缓存起来
|
14
pynix 2014-04-19 12:50:46 +08:00 via Android
楼主头像很萌
|
15
ksc010 2014-04-20 12:39:40 +08:00
可以同时用
|