`
juggler
  • 浏览: 171923 次
  • 性别: Icon_minigender_1
  • 来自: 广东
社区版块
存档分类
最新评论

javaeye:关系型数据库表设计,如何保存树状结构数据? 我有我见解。

阅读更多
链接: http://forum.iteye.com/viewtopic.php?t=15829

这是一个很有趣的东西,无限分类问题。

这里涉及到沉余数据的问题,如果不这样做,我们没法很快的对数据进行搜索。

我的方法是,在表中加入layerpath,用特别的符号分隔id;加入parentlayer,用来标记父节点;加入level,用来表示这是第几层(这个可以不要,实际应用中几乎没用,反而加大了修改layer的难度)。

这样做的优点是把搜索的重任交给了数据库,比如说查找某个节点下的所有子节点,包括继承子节点,我们就可以用一刀切的方式取得,而不用遍历树的方法,比如我的layerpath的格式如下:
|1|3|7|8|
我要查找id为1的所有子节点及继承子节点:
SQL:select * from craft where layerpath like '%|1|%';

而修改一个节点的上下文关系时,仅仅只要修改一个parentlayer就行,当然,我们要在修改更新时检查节点的继承关系(这是最重要的)。

当然,这样的设计也会有缺点,当类别数据量太多时,就会让数据库吃不消,就比如电信的电子黄页,就有一千多个类别,至少四层,特别是在搜索时,系统的很容易挂掉。解决方法唯有是用缓存。
分享到:
评论

相关推荐

    http://yourgame.javaeye.com/blog/252853

    这些脚本可能包括创建表、视图、存储过程、触发器等数据库对象,以及填充初始数据的INSERT语句。 3. **SQL语言**:SQL(Structured Query Language)是用于管理和处理关系数据库的标准语言。它包括数据查询、数据...

    javaeye网站架构解密

    面对大量的动态请求,JavaEye采用了多级缓存机制,包括页面缓存、数据缓存和数据库查询缓存等,有效减轻了后端数据库的压力,提高了网站的整体性能。其中,页面缓存主要用于存储静态或变化不频繁的内容,减少重复...

    JavaEye第六期

    【JavaEye第六期】是2008年8月出版的一期专注于Java技术的电子书,其中涵盖了多个Java相关的技术和趋势。以下是对其中关键知识点的详细说明: 1. **Seam 2.1的新特性**:Seam是一个开源的Java EE框架,致力于简化...

    Oracle笔记。。。

    1. **数据库结构**:Oracle数据库由多个逻辑存储结构组成,包括表空间、数据文件、重做日志文件、控制文件等。表空间是Oracle数据库存储数据的主要单位,它由一个或多个数据文件构成。数据文件实际保存了数据库的...

    JavaEye博文JavaEye博文JavaEye博文

    "JavaEye博文" 本资源摘要信息来自JavaEye博文,作者cutesunshineriver,发布于2010年。该博文涵盖了软件开发、编程、项目管理等多方面的知识点。 在本博文中,我们可以看到多个与软件开发相关的知识点,包括: 1...

    JavaEye Client SourceCode

    10. **Android Studio集成开发环境**:作为Android开发的标准工具,JavaEye客户端的构建可能依赖于Gradle,源码中会包含build.gradle文件,定义了项目结构、依赖关系和构建配置。 通过对JavaEye Client SourceCode...

    javaeye热点阅读

    JavaEye热点阅读是JavaEye论坛推出的2009年2月特辑,旨在为Java学习者和开发者提供最新的知识及行业动态。这份资料包含了多个Java相关的主题,包括但不限于并发编程、开源项目、设计模式、框架应用以及软件开发实践...

    JavaEye+技术架构

    1. **MVC模式**:JavaEye+可能采用了Model-View-Controller(模型-视图-控制器)架构模式,这是一种将业务逻辑、用户界面和应用程序数据分离的设计方式,有利于代码的组织和维护。 2. **Spring框架**:作为Java企业...

    JavaEye论坛热点推荐

    13. **万能DAO设计**:DAO(Data Access Object)是数据访问对象,是软件设计模式之一,用于封装数据库操作,这里的讨论分享了自定义DAO设计的经验和源码,邀请同行进行评审和交流。 JavaEye论坛是一个汇集了众多...

    javaeye的jert,和birt的使用文档

    BIRT支持多种数据源,包括关系数据库、Web服务、XML等,并且集成了强大的图表和图形生成能力。BIRT具有一个可视化的报表设计环境,允许用户通过拖放操作创建复杂的报表结构。 在这个压缩包中,我们可以看到一些关键...

    测试JavaEye的PDF生成效果

    标题“测试JavaEye的PDF生成效果”提示我们关注的是一个使用JavaEye库生成PDF文档的实践过程。JavaEye可能是一个用于Java平台的开源库,它提供了将数据转换为PDF格式的功能,这对于创建报告、手册或其他需要打印或...

    javaeye Robbin 论缓存技术

    - **Data Buffer**:数据库的数据缓冲区,如MySQL的InnoDB buffer pool,用于存放数据页,提高数据读写的效率。建议设置为服务器物理内存的60-80%。 **监控与调优** - 对于数据库缓存,可以通过MySQL的`show ...

    javaeye被黑

    javaeye被黑 大家看看

    JavaEye3.0开发手记

    ### JavaEye3.0开发手记之开发环境搭建详解 #### 一、开发环境搭建概述 随着JavaEye3.0开发计划的启动,本篇文章将详细介绍如何为该项目搭建高效的开发环境。开发过程中不仅需要考虑软件的选择,还需要针对操作...

    android javaeye客户端

    Android JavaEye客户端的架构设计通常采用MVP(Model-View-Presenter)模式,这是一种常见的Android应用设计模式,它将业务逻辑、数据模型和用户界面分离,提高了代码的可测试性和可维护性。Model层负责数据处理和...

    Java Spring-data for mongodb

    它提供了统一的API,覆盖了多种数据存储技术,包括关系型数据库、NoSQL数据库、搜索引擎等。Spring-data-mongodb模块则是专门针对MongoDB的,它将MongoDB的操作与Spring的编程模型完美结合,使得开发者可以充分利用...

Global site tag (gtag.js) - Google Analytics