`

层次树表结构的设计

阅读更多

 

组织机构是典型的层次树结构表,以下就以组织为例开始分析

 

 

1. 部门机构树如下

 

┌───────────────
│                                          
│    部门                               
│     │                                 
│     ├─技术部                     
│     │    │                          
│     │    ├─技术1部            
│     │    │                          
│     │    └─技术2部            
│     │                                  
│     ├─市场部                     
│     │    │                           
│     │    ├─市场1部            
│     │    │                           
│     │    └─市场2部            
│     │                                 
│     └─客服部                     
│                                         
└───────────────

 

 

 

2. 数据库表 org

标识 父标识 所有父标识 名称 编码 父编码 所有父编码 叶子 级别
id parent_id parent_ids text code parent_code parent_codes leaf grade
 1  '1'  部门  00  '00'  0 1
 2  1  '1','2'  技术部  0001  00  '00','0001'  0 2
 3  2  '1','2','3'  技术 1  000101  0001  '00','0001','000101'  1 3
 4  2  '1','2','4'  技术 2  000102  0001  '00','0001','000102'  1 3
 5  1  '1','5'  市场部  0002  00  '00','0002'  0 2
 6  5  '1','5','6'  市场 1  000201  0002  '00','0002','000201'  1 3
 7  5  '1','5','7'  市场 2  000201  0002  '00','0002','000202'  1 3
 8  1  '1','8'  客服部  0003  00  '00','0003'  1 2

 

 

3. 这样设计的好处

 

(1)

上下级关系变化时修改code即可,不需要修改主键id

(2)

 

有了code可以方便查看所有子节点信息 ,比如查看id为1的所有子节点信息

根据id(1)先获取code(0001)再执行select * from org where code like '0001%'

(3)

 

有了parent_codes可以方便查看所有父节点信息 ,比如查看id为6的所有父节点信息

根据id(6)先获取parent_codes再执行select * from org where code in ('00','0002','000201')

(4)

 

有了leaf可以方便查看所有叶子和非叶子节点信息 ,比如查看所有叶子节点信息

select * from org where leaf = '1'

(5)

 

有了grade可以方便查看某级别的节点信息 ,比如查看层次树级别为2的节点信息

select * from org where grade = '2'

 

 

 

4. 注意事项

 

(1)

 

根节点code的值必须是00

不合法:01、02、10、20

(2)

 

 

子节点code的值必须是“父节点code + 序号(不能是00)”

合法:0001、0002、000101

不合法:01、0000、0101、000100

 

 

 

分享到:
评论

相关推荐

    树形结构的数据库表Schema设计1

    首先,最基本的树形结构设计是通过`{Node_id, Parent_id}`来描述节点间的继承关系,即每个节点都有一个唯一的ID(Node_id),同时记录其父节点的ID(Parent_id)。这样的设计简单直观,便于理解和实现。但是,这种...

    根据数据库表结构自动生成产品结构树

    "根据数据库表结构自动生成产品结构树"这一技术,其核心是将数据库中的BOM数据转换成可视化、层次化的结构,以树形图的方式展示出来。这涉及到数据库查询、数据处理和图形化表示等多个方面的知识。 首先,我们需要...

    动态树形菜单数据库表设计

    ##### 数据表结构设计 假设菜单数据具有如下结构: - 菜单项ID - 父菜单ID - 菜单项名称 - 其他相关信息 基于此,我们可以设计一个包含冗余数据的表结构如下: - **表名:** Menu - **MenuID:** 主键,唯一标识每...

    jpa单表递归树形结构实现

    在Java开发中,数据结构和关系的处理是常见的任务之一,尤其在构建具有层次结构的系统时,如组织架构、菜单导航或文件目录等。`JPA(Java Persistence API)`是Java EE平台中的一个标准,用于管理关系数据库的对象...

    单表树结构

    在IT行业中,单表树结构是一种常见的数据组织方式,尤其在资源管理器或者数据库设计中广泛应用。这个结构能够有效地模拟现实世界中的层级关系,比如组织架构、地理区域划分或者文件目录等。在这个场景中,"地区树...

    五级树形菜单结构

    "五级树形菜单结构"是这种概念的一个具体实现,允许用户以直观的方式查看和操作最多五层深度的层次数据。 首先,我们来详细解释树形菜单的基本概念。树形菜单是由节点构成的图形结构,每个节点可以有零个或多个子...

    关系数据库表存储树形结构的方法

    这种实现方式的关键在于如何设计表结构以及如何高效地完成各种操作。 检索方法涉及从数据库表中查找特定节点的子节点或父节点。检索子节点时,可以通过临时表来模拟队列操作,逐层向下检索。检索父节点则直接通过...

    树形结构数据库设计和显示

    总结来说,"树形结构数据库设计和显示"这个主题涵盖了数据库设计中的层次模型,特别是在Oracle中的实现方式,以及Java如何处理JSON数据并与前端交互。在前端部分,我们介绍了如何使用ZTree这样的JavaScript库来展示...

    数据结构课程设计二叉树采用二叉链表作为存储结构

    本课程设计的主要任务是设计并实现一个二叉树的存储结构,使用二叉链表作为存储结构,并实现按层次顺序遍历二叉树的算法。下面是本设计的详细解释和实现过程: 一、问题描述 在数据结构课程设计中,二叉树是一种...

    树形结构(增删改查刷新等功能附SQL脚本)

    在IT领域,树形结构是一种常见的数据组织方式,它模拟了自然界中的树状层次关系,广泛应用于文件系统、数据库索引、计算机科学的算法设计等多个方面。在这个项目中,我们探讨的是如何在Java环境中,利用JSP(Java...

    BS实现树形结构(jsp+mysql数据库+设计文档)

    树形结构是一种层次化的数据表示方式,它模仿了自然界中的树状关系,每个节点可以有零个或多个子节点。在网页中,这通常表现为多级菜单,用户可以通过展开和折叠节点来浏览不同的层级。在本项目中,使用JSP(Java...

    Tree_树形结构_

    在IT领域,树形结构是一种极其重要的数据结构,它广泛应用于各种算法和系统设计中。树形结构模拟了自然界中的树状关系,每个节点代表一个元素,节点间通过边相连,形成层次分明的结构。本篇文章将深入探讨“树形结构...

    design 树形菜单表设计

    总之,设计树形菜单表时,我们需要综合考虑数据结构、数据库设计、编程实现和前端展示等多个方面,确保结构清晰、操作流畅、性能高效。结合提供的资源,可以深入学习并实践这些知识,为自己的项目增添强大的功能。

    Hibernate 单表实现树结构

    这样的设计使得单个表能够表示层次关系。 接着,为了在Hibernate中正确地映射这种关系,我们需要在实体类上添加对应的注解。@ManyToOne注解用于表示一对多的关系,这里表示当前节点与父节点的关系;@JoinColumn注解...

    BS树形结构(jsp+mysql数据库+设计文档)

    8. **数据库设计**:设计合理的数据库表结构对于实现树形结构至关重要。可能需要一个包含节点ID、父节点ID、节点名称等字段的表,通过父子关系构建树形结构。 9. **JDBC**:Java Database Connectivity是Java与...

    Java实现树形层级结构的表格

    Java实现的,将树形层级结构的数据转换成表格,通过打点的方式向表格中插入数据,支持行头表格、列头表格、交叉表格三种形式

    Delphi中快速实现数据库树形结构并实现Treeview导航表数据

    2. **数据结构设计**:为了存储和处理数据库数据,我们需要定义一个数据结构,例如TNode,它包含节点文本、子节点列表以及可能关联的数据库记录ID。这将帮助我们构建和管理树形结构。 3. **填充TreeView**:使用...

    树(孩子—兄弟链表表示)

    - 使用队列保证了层次遍历的顺序,确保了节点按照层次关系正确地添加到树中。 #### 示例代码分析 代码片段中包含了创建孩子—兄弟链表所需的关键函数,如初始化树、创建队列、队列操作(插入和删除)、以及创建树...

    树的实现--利用二叉链表(孩子-兄弟)存储结构

    在实际应用中,树的这种实现方式常用于编译器设计、文件系统、XML解析等领域,因为它能有效地表示具有复杂层次关系的数据。 总结来说,“孩子-兄弟”存储结构是C语言中实现树的一种有效方法,它通过二叉链表的形式...

    树结构实现页面的显示

    在页面显示上,可以利用这种结构设计文件浏览器,用户可以逐级展开目录,查找和操作文件。 网络管理协议SNMP(Simple Network Management Protocol)主要用于监控和管理网络设备。SNMPv2在SNMP的基础上增加了更多的...

Global site tag (gtag.js) - Google Analytics