数据库设计心得 --- 树形结构
来源:互联网 发布:淘宝韩版春秋女装 编辑:程序博客网 时间:2024/05/19 00:10
树型结构表的设计在实践中, 经常碰到. 如果设计不好, 则会给应用程序的实现导致很大的麻烦. 这里以文件夹、文件作为例子介绍
实现:
-- 文件夹信息表
create table t_folder
(
folder_id number primary key, -- 文件夹ID
folder_name varchar(50),
parent_folder_id_dir varchar(256) default '/' not null -- 上级文件夹ID目录, 格式"1/2/", "/"表示顶级文件夹
);
-- 文件信息表
create table t_file
(
file_id number primary key,
file_name varchar(50),
folder_id_dir varchar(256) default '/' not null -- 文件所在文件夹目录串, 以字符/分隔, 默认
);
-- 例子语句
insert into t_folder(folder_id, folder_name, parent_folder_id_dir) values (1, '1_folder_name', '/');
insert into t_folder(folder_id, folder_name, parent_folder_id_dir) values (2, '2_folder_name', '1/');
insert into t_folder(folder_id, folder_name, parent_folder_id_dir) values (3, '3_folder_name', '1/');
insert into t_folder(folder_id, folder_name, parent_folder_id_dir) values (4, '4_folder_name', '1/3/');
insert into t_file(file_id, file_name, folder_id_dir) values (1, '1_file_name', '1/');
insert into t_file(file_id, file_name, folder_id_dir) values (2, '2_file_name', '1/3/');
insert into t_file(file_id, file_name, folder_id_dir) values (3, '3_file_name', '1/2/');
insert into t_file(file_id, file_name, folder_id_dir) values (4, '4_file_name', '1/2/');
问题:
1. 获取文件夹目录结构
select parent_folder_id_dir from t_folder where folder_id = 4;
2. 获取文件夹及子文件夹下所有文件
select * from t_file where folder_id_dir like '1/2/%';
注:此语句可以利用索引(字符串前缀模糊配置)
设计:
1. parent_folder_id_dir取值为上级文件夹ID目录串, 解决"根据folder_id获取文件夹目录结构"需求, 非常方便
2. folder_id_dir取值为文件夹ID目录串, 解决"递归获取文件夹及子文件夹下的所有文件"需求, 非常方便
备注:
1. 如果t_folder表中parent_folder_id_dir字段取成parent_folder_id, 如果需要获取文件夹目录结构, 则需要逐级向上查询t_folder表
2. 如果t_file表中folder_id_dir字段取成folder_id, 如果需要获取文件夹及子文件夹下所有文件时, 则需要递归逐级向下查询t_file表
- 数据库设计心得 --- 树形结构
- 树形结构数据库设计
- 数据库设计(树形结构)
- 树形结构 数据库表设计
- 树形结构 数据库表设计
- 树形结构 数据库表设计
- 树形结构 数据库表设计
- 树形结构 数据库表设计
- 树形结构 数据库表设计
- 树形结构的数据库表Schema设计
- 树形结构的数据库表Schema设计
- 树形结构的数据库表Schema设计
- 数据库表设计系列:树形结构数据
- 树形结构的数据库表Schema设计
- 树形结构的数据库表Schema设计
- 树形结构的数据库表Schema设计
- 数据库设计 (一)树形结构
- 常见数据库设计 — 树形结构数据
- 辛亥百年纪念 - 产品组件系列02
- 交流
- 10.12学习笔记
- Linux下的多线程编程
- CSS 动画指南: 原理和实战
- 数据库设计心得 --- 树形结构
- C# 查询更新ACCESS数据
- Xcode4中如何设置Company Name
- 光荣与梦想 — 疯狂猎鸟项目小结
- Ubuntu 命令技巧
- Android中获取应用程序(包)的信息-----PackageManager的使用(一)
- C#用SQL语句操作ACCESS
- android listview与sqlite数据绑定
- PHP编程乱码问题整理