树形结构的数据库的存储
2015-12-12 19:22
615 查看
程序设计过程中,我们常常用树形结构来表征某些数据的关联关系,如企业上下级部门、栏目结构、商品分类等等,通常而言,这些树状结构需要借助于数据库完成持久化。理想中树形结构应该具备如下特征:数据存储冗余度小、直观性强;检索遍历过程简单高效;节点增删改查CRUD操作高效。
列举了一个食品族谱的例子进行讲解,通过类别、颜色和品种组织食品,树形结构图如下:
1,对树形结构最直观的分析莫过于节点之间的继承关系上,通过显示地描述某一节点的父节点,从而能够建立二维的关系表,则这种方案的Tree表结构通常设计为:{Node_id,Parent_id}
2,在基于数据库的一般应用中,查询的需求总要大于删除和修改。为了避免对于树形结构查询时的“递归”过程,基于Tree的前序遍历设计一种全新的无递归查询、无限分组的左右值编码方案,来保存该树的数据。
至于上述两种方法的具体介绍和实现以及优缺参考:树形结构的数据库表Schema设计。
其实我们最重要的数据是这个样子的:
{Catagory:"Food",FoodCategory:"Fruit",color:"Red",Name:"Cherry"}
{Catagory:"Food",FoodCategory:"Fruit",color:"Yellow",Name:"Banana"}
{Catagory:"Food",FoodCategory:"Meat",Name:"Beef"}
{Catagory:"Food",FoodCategory:"Meat",Name:"Pork"}
……
其实我觉得这种关系型数据库可以用MongoDb来存储(Json的数据格式),这样用非关系数据库的思想解决这个问题岂不是更好?这种可以不通过递归过程不断地访问数据库,每次数据库IO都会有时间开销;也避免了第二种节点的添加、删除及修改代价较大,将会涉及到表中多方面数据的改动。是不是萌萌哒?一家之言,欢迎拍砖!
列举了一个食品族谱的例子进行讲解,通过类别、颜色和品种组织食品,树形结构图如下:
1,对树形结构最直观的分析莫过于节点之间的继承关系上,通过显示地描述某一节点的父节点,从而能够建立二维的关系表,则这种方案的Tree表结构通常设计为:{Node_id,Parent_id}
2,在基于数据库的一般应用中,查询的需求总要大于删除和修改。为了避免对于树形结构查询时的“递归”过程,基于Tree的前序遍历设计一种全新的无递归查询、无限分组的左右值编码方案,来保存该树的数据。
至于上述两种方法的具体介绍和实现以及优缺参考:树形结构的数据库表Schema设计。
其实我们最重要的数据是这个样子的:
{Catagory:"Food",FoodCategory:"Fruit",color:"Red",Name:"Cherry"}
{Catagory:"Food",FoodCategory:"Fruit",color:"Yellow",Name:"Banana"}
{Catagory:"Food",FoodCategory:"Meat",Name:"Beef"}
{Catagory:"Food",FoodCategory:"Meat",Name:"Pork"}
……
其实我觉得这种关系型数据库可以用MongoDb来存储(Json的数据格式),这样用非关系数据库的思想解决这个问题岂不是更好?这种可以不通过递归过程不断地访问数据库,每次数据库IO都会有时间开销;也避免了第二种节点的添加、删除及修改代价较大,将会涉及到表中多方面数据的改动。是不是萌萌哒?一家之言,欢迎拍砖!
相关文章推荐
- 安装了多个Oracle11g的客户端,哪个客户端的tnsnames.ora会起作用?
- [Oracle] 逻辑结构实验与总结
- 把R里面的数据导入到mysql数据库的两种方式
- mysql关于bit类型用法
- mysql-5.7.10-winx64 启动报错
- 常用的几种数据库介绍
- 数据库文档生成工具(1)
- win10 MySQL Workbench打不开解决方案
- 【SQL学习笔记】查询结果resultset无法回滚问题
- Oracle之日期运算
- ContOS7下安装mysql
- oracle一个用户密码管理多达同意三次企图登录
- CMD创建oracle制定表空间为用户
- ibatis使用in查询加引号
- 使用Opatch给oracle打补丁
- SqlServer——for xml path
- .NET开发辅助工具(五)---SQL 开发工具
- LAMP 3.1 mysql的root密码重置
- 房间计费系统改造——数据库设计
- Mysql 多表联合查询效率分析及优化