`

在Oracle中实现可扩展的多级编目结构

阅读更多

 

2009-10-16 作者:zhangyuk 来源:章鱼的blog

 

一、可扩展多级编目的定义

可扩展多级编目有下述特点:

编目分级,上下级编目形成父子关系;

任意节点可以有零到多个子节点,任意子节点有且只有一个父节点;

节点深度在理论上可以无限扩充;

由上述特点可知,可扩展多级编目实际上是树。

二、可扩展多级编目的例子

Windows操作系统中的文件路径是一个典型的多级编目结构。多级编目结构的例子还有很多:人的家谱、文献索引、制造业的BOM、财务的科目编码、公司组织结构等。

三、可扩展多级编目在Oracle中的设计

概念设计:

物理设计:

多级编目表的设计思路跟“树”的设计思路一样。ID是行的唯一标识,用Oracle的序列和触发器(可参见有关文章)实现自增长。PARENTID是指向本表的外键,如果该行有父节点则引用本表中父节点行的ID,如果该行是根节点则为空。

四、用connect by遍历多级编目表

用Oracle提供的connect by命令可以正序或逆序遍历多级编目表。正序遍历的例子:


  select ID,PARENTID,NAME,DESCRIBE,levelfromXXX_CLASS_TAB
  connectby PARENTID =prior ID
  startwith PARENTID isnull
  connect by的标准语法为:
  SELECT expression [,expression] …
  FROM [user.] table
  WHERE condition
  CONNECT BY [PRIOR] expression = [ PRIOR ] expression
  START WITH expression = expression
  ORDER BY expression

Start with指定从哪个节点开始遍历;

Connect by 指定父子节点的连接方式,其中prior修饰遍历的初始节点;

Order by 指定排序关键字,但是使用order by 会破坏节点的遍历顺序;

Connect by 工具允许Level关键字,Level代表节点的深度;

用where可以过滤行,但不影响其关系节点;

用connect by可以过滤行以及该行的关系节点。

五、提高connect by的查询效率

如果多级编目表的数据较多或层次较多,为了提高查询效率,可以为多级编目表建立索引。索引的建立取决于connect by子句。上面例子的connect by子句为:


  connectby PARENTID =prior ID

这时可以为该表建立两个索引,第一个索引在 PARENTID和ID上建立,第二个索引在ID和PARENTID上建立。这样无论正序还是逆序遍历该表,都会用索引访问代替全表扫描,从而提高查询效率。

六、排序会打乱多级编目表的遍历顺序

connect by按照深度优先原则进行遍历,所以尽管使用各种排序的办法,connect by仍然会将搜索深度最大的行排在前面。也就是说,在connect by 中使用order by 将得不到正确的遍历顺序。

分享到:
评论

相关推荐

    使用Oracle游标实现多级展开菜单树.pdf

    在Oracle中,声明游标的基本结构如下: ```sql DECLARE cursor_name CURSOR FOR SELECT column1, column2, ... FROM table_name WHERE condition; ``` 在游标声明后,可以打开游标并进入一个循环,通过FETCH语句...

    SqlServer表结构转oracle表结构

    C#代码可以通过ADO.NET或者其他数据库访问库连接到SQL Server和Oracle,读取SQL Server的表结构,然后在Oracle中创建相应的表。 3. **注释迁移**:在SQL Server中的表注释和字段注释,通常存储在系统视图中。C#代码...

    基于Oracle实现多数据库环境多级数据仓库的ETL.pdf

    文章主要讲述了基于Oracle技术在多数据库环境下实现多级数据仓库的ETL(数据抽取、转换和加载)过程。首先,作者指出传统集中式数据库架构由于其瓶颈问题已经越来越无法适应海量数据对系统的I/O性能、应用扩展和计算...

    oracle表结构生成工具

    在Oracle中,表结构是数据库的基础,包括表名、字段(列)、数据类型、约束等元素。创建和维护这些结构通常需要编写SQL语句,这可能对非专业程序员或数据库管理员来说是一项繁琐的任务。 .NET框架是微软开发的一种...

    PowerDesigner15连接Oracle数据库并导出Oracle的表结构

    在该对话框中,选择DBMS为Oracle Version 10g,并选择使用数据源连接。 知识点3:创建数据源配置 在“Connection to a Data Source”对话框中,选择第三个“Connection profile”选项,然后点击“Configuer”按钮,...

    Oracle 12C RAC可扩展性研究与实现.pdf

    Oracle RAC在12C版本中已经支持最多128个节点,但实际性能和扩展性不仅取决于节点数量,还受到共享存储的I/O能力、可用性,以及集群间的网络通信效率等因素的影响。 RAC的扩展性主要体现在两个方面:一是垂直扩展,...

    Oracle体系结构图

    oracle体系结构图oracle体系结构图oracle体系结构图oracle体系结构图oracle体系结构图oracle体系结构图oracle体系结构图oracle体系结构图oracle体系结构图oracle体系结构图

    c# 导出oracle数据库下所有表结构

    综上所述,通过C#连接Oracle数据库并查询"All_tables"和"All_TAB_COLUMNS"视图,可以实现导出所有表结构的目标。这在数据库维护、备份或迁移场景中非常有用。通过进一步封装和优化,可以创建一个实用的工具,方便...

    Oracle Database 12cR2 Architecture体系结构图 高清版

    1. **多租户架构**:Oracle 12c 引入了多租户容器数据库(CDB),允许在一个物理数据库中容纳多个独立的数据库,称为可插拔数据库(PDB)。PDB 可以像传统的单实例数据库一样操作,但它们共享 CDB 的资源,从而简化...

    oracle9i物理结构,oracle9i物理结构

    Oracle 9i 物理结构是数据库管理系统的核心组成部分,它决定了数据如何在磁盘上存储、管理和访问。Oracle 9i 物理结构主要由以下几个关键组件构成: 1. **数据文件 (Data Files)**: 扩展名为 .DBF 的数据文件是...

    OracleDB体系结构

    - **共享池**:缓存可在用户间共享的各种结构,如SQL语句、游标等。 - **大型池**:为某些大型进程(如备份和恢复操作)提供额外的内存空间。 - **Java池**:存储JVM中所有特定会话的Java代码和数据。 - **...

    oracle导出数据库表结构到word文档中

    Oracle数据库表结构导出器是一套用来完成将Oracle数据库中的表结构导出成Word文档,并输出标准的打印报表格式的软件。亲测oracle绝对好使 ,另附有链接信息,请先看好说明再操作.不会的加我qq87611894

    Oracle体系结构简介

    Oracle 体系结构是一个复杂而精细的设计,旨在提供高效、安全且可扩展的数据库管理解决方案。以下是对Oracle体系结构主要组成部分的详细说明: 1. **数据库**:数据库是Oracle的核心,它是一个逻辑数据集合,包含了...

    Oracle体系结构概述

    首先,我们关注物理结构,这是Oracle数据库在磁盘上的实际存储形式。主要包含以下几个部分: 1. **数据文件**:数据文件是Oracle数据库中最基本的存储单元,存储了所有数据库对象,如表、索引等。它们以.dbf为扩展...

    Oracle和数据结构

    在Oracle中,理解数据结构是至关重要的,因为这直接影响到数据库的性能和设计。 一、Oracle数据结构基础 1. 表(Table):表是Oracle数据库中最基本的数据存储单元,由一系列行(Records)和列(Columns)组成,...

    Oracle 数据库结构导出word工具OracleDB2Doc

    OracleDB2Doc V2.0(Oracle数据库表结构导出器)是一套用来完成将Oracle数据库中的表结构导出成Word文档,并输出标准的打印报表格式的软件。 软件采用Word中VBA开发完成,软件使用Word中的菜单操作,与Word完全集成...

    oracle体系结构思维导图.jpg

    oracle体系结构思维导图

    SSH框架实现增删改查,Oracle数据库

    SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架,用于构建高效、可扩展的企业级应用。本教程将详细介绍如何利用SSH框架结合Oracle数据库来实现基本的CRUD(Create、Read、...

    oracle数据库导出表结构到WORD文档

    通过这个工具,我们可以快速地将Oracle中的数据库对象信息整理成Word文档,方便打印、编辑和共享。 具体步骤通常包括以下几点: 1. **连接数据库**:首先,我们需要一个能连接到Oracle数据库的工具,如SQL ...

    oracle数据库表结构比较

    oracle两个不同的数据库比较表结构的不同,同时自动形成升级的sql语句,以目标数据库为标准,自动形成源数据库中没有的表或列的创建sql语句;如果源数据库中存在目标数据库中没有的表或列,则不予考虑;即只考虑没有...

Global site tag (gtag.js) - Google Analytics