文件树结构查询优化(目前查询后可先去喝杯咖啡再回来看结果)
时间:2011-08-08
来源:互联网
我使用MYSQL建立文件树结构,主要表格有
files 文件表
shares 共享表
users 用户表
files中的关键字段有:
id 文件编号
fid 父编号
name 名称
type 类型:文件夹/文件
userid 用户编号
shares中的关键字段有:
fileid 文件/文件夹编号
userid 用户编号,可以是0.如果是0,表示对应的权限针对所有用户;非0,表示
priv 权限值,第0位(可写)表示:如果fileid对应的是文件夹,则是否允许他人在此创建文件或文件夹;第1位(可穿透)表示如果fileid对应的是文件夹,则共享给他人后,他人是否可以看到非自己的文件或文件夹。不管priv的值是什么,userid对应的用户就可以查看fileid对应的文件或文件夹(只是不一定可以创建或看到他人的文件)
users中关键字段有:
id 用户编号
files表中,有几个系统的固定记录,他们的fid=0,分别是:
桌面 该记录共享给所有用户,可写,但不可穿透。
我的共享 所有我共享的文件或文件夹
他人的共享 他人共享给我的所有文件或文件夹
零碎文件 我的文件或文件夹,但其父亲对我不可见。
定义:我可见的文件(夹)
1. 我的文件(夹)
2. 别人共享给我的文件(夹)
3. 我的文件夹下的文件(可能我的文件夹共享给别人,且可写,因此会有他人的文件)
4. 他人共享给我的文件夹(且该文件夹对我可穿透,参考shares.priv字段)下的文件
现在的问题是要创建文件夹:
根节点是:桌面、我的共享、他人的共享、零碎文件
1 “桌面”下按数据表files中的层次显示我可见的文件,如果有断开,则断开的文件(夹)不显示。
2 “我的共享”下,显示虚拟的节点,即,数据表中的记录实际上都是从“桌面”延伸出去的,并未在“我的共享”下。“我的共享”的直接儿子是我共享给他人的所有记录,每个记录下面按数据表中的层次树显示我可见的文件
3 “他人的共享”下,显示虚拟的节点。其直接儿子是所有他人共享给我的记录,每个记录下面按数据表中的层次树显示我可见的文件
4 “零碎文件”下,显示虚拟节点。其直接儿子是:我的文件(夹),该文件的父亲必须是别人的,且未共享给我。这些记录下面按数据表中的层次树显示我可见的文件。
上述文件树中,桌面下的文件和其他文件夹中可能会有重叠的,例如,如果桌面下的直接儿子A共享给他人了,则A既会出现在“桌面”下,又会出现在“我的共享”下,且两处A节点都可以展开显示我可见的文件(夹)。
大家看看该问题如何优化查询?
files 文件表
shares 共享表
users 用户表
files中的关键字段有:
id 文件编号
fid 父编号
name 名称
type 类型:文件夹/文件
userid 用户编号
shares中的关键字段有:
fileid 文件/文件夹编号
userid 用户编号,可以是0.如果是0,表示对应的权限针对所有用户;非0,表示
priv 权限值,第0位(可写)表示:如果fileid对应的是文件夹,则是否允许他人在此创建文件或文件夹;第1位(可穿透)表示如果fileid对应的是文件夹,则共享给他人后,他人是否可以看到非自己的文件或文件夹。不管priv的值是什么,userid对应的用户就可以查看fileid对应的文件或文件夹(只是不一定可以创建或看到他人的文件)
users中关键字段有:
id 用户编号
files表中,有几个系统的固定记录,他们的fid=0,分别是:
桌面 该记录共享给所有用户,可写,但不可穿透。
我的共享 所有我共享的文件或文件夹
他人的共享 他人共享给我的所有文件或文件夹
零碎文件 我的文件或文件夹,但其父亲对我不可见。
定义:我可见的文件(夹)
1. 我的文件(夹)
2. 别人共享给我的文件(夹)
3. 我的文件夹下的文件(可能我的文件夹共享给别人,且可写,因此会有他人的文件)
4. 他人共享给我的文件夹(且该文件夹对我可穿透,参考shares.priv字段)下的文件
现在的问题是要创建文件夹:
根节点是:桌面、我的共享、他人的共享、零碎文件
1 “桌面”下按数据表files中的层次显示我可见的文件,如果有断开,则断开的文件(夹)不显示。
2 “我的共享”下,显示虚拟的节点,即,数据表中的记录实际上都是从“桌面”延伸出去的,并未在“我的共享”下。“我的共享”的直接儿子是我共享给他人的所有记录,每个记录下面按数据表中的层次树显示我可见的文件
3 “他人的共享”下,显示虚拟的节点。其直接儿子是所有他人共享给我的记录,每个记录下面按数据表中的层次树显示我可见的文件
4 “零碎文件”下,显示虚拟节点。其直接儿子是:我的文件(夹),该文件的父亲必须是别人的,且未共享给我。这些记录下面按数据表中的层次树显示我可见的文件。
上述文件树中,桌面下的文件和其他文件夹中可能会有重叠的,例如,如果桌面下的直接儿子A共享给他人了,则A既会出现在“桌面”下,又会出现在“我的共享”下,且两处A节点都可以展开显示我可见的文件(夹)。
大家看看该问题如何优化查询?
作者: kiki_one 发布时间: 2011-08-08
伤不起啊
作者: yelangmingming 发布时间: 2011-08-08
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28