怎样才能实现排序优化的层次关系表设计

怎样才能实现排序优化的层次关系表设计,第1张

怎样才能实现排序优化的层次关系表设计,第2张

数据层次的概念:
数据层次是表示数据的一种重要关系。在数据库的设计中,如组织结构分解、任务分解和行政区划分解都是层次关系数据的典型例子。

通常,表示层次关系的数据需要实现以下属性:

1.层次结构的级联级别数。如:中国->湖南省->长沙市->雨花区,也就是4楼。

2.它可以反映相同级别之间的顺序关系。比如长沙肯定在衡阳前面(因为是省会)。

3.您可以获得任何级别的父节点级别的子节点(子节点集)。

4.直接获取任何级别的数据。比如三线城市级别的数据。

5.构造层次关系表达式树很方便。

6.层次结构和排序方式的改变不影响其他数据的内部逻辑关系。

通常,有三种方法来表示分层数据:

1.建立多个数据库表:

例如,COUNTRY: ID(主键)COUNTRY_NAME

省:ID(主键)COUNTRY_ID(外键),省名

城市:ID(主键),省ID(外键),城市名称

这种方法简单,但设计不够灵活,数据处理比较麻烦。

2.采用表的自关联外键引用。

例如:DISTRICT_INFO: ID(主键),PARENT_ID,(外键)DISTRICT_INFO

通过引用外键(PARENT_ID)的主键(ID)建立层次关系。

优点:不限层次关系,扩展性强。对于Oracle数据库,只需通过start with,,,connect by-statement即可实现对数据的查询。

缺点:看不清楚层次关系,无法实现排序。

3.采用编码来实现层次结构。

区:ID、代码、名称,其中代码以上级代码对下级代码的前缀为特征。

优点:通过编码的内容很容易回到数据的层次关系。

缺点:使用Like方法或函数查询查找子集效率低,能够实现层次关系的层数有限(受代码的字段长度影响)。

优化方案:

设置2,3,用固定长度的方法设计表的编码级别。

地区:ID,代码,PARENT_ID,名称

其中ID是主键,CODE:被指定为4位数级别。性能数据如下:

Id,codeparent _ id,name
1 0001中国
2 00010001 1湖南
3 00010010001 2衡阳
4 00010010002 2 2长沙
5 00010001

从数据中可以看出,PARENT_ID可以直观的表达层次关系。

代码CODE可以直观地表达同一级别的层次关系和顺序关系。

如果长沙要排在衡阳前面,就要调整它的代码,外部引用关系不会受它影响,因为是用ID实现的。

获取节点的父节点:

Select * From DISTRICT Where ID =(Select PARENT _ ID From DISTRICT Where ID = 2)

获取节点的子节点列表:

select * From PARENT _ ID = 2的地区

获取所有子节点信息:

选择级别,*从d区开始,从PARENT_ID=2开始,通过d连接。PARENT _ ID = Prior t . ID

或-排序模式

Select * From DISTRICT d,其中d.CODE如“00010001%”按代码排序

获取某一级(n)的节点信息(实现排序,意思是级代码长度固定):

Select * From地区,其中长度(代码)=4*N,代码如“0001%”按代码排序......

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 怎样才能实现排序优化的层次关系表设计

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情