BI树型结构的四种建模方法_第1页
BI树型结构的四种建模方法_第2页
BI树型结构的四种建模方法_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

树型结构的四种建模方法分类:DataModelDWBIEE11gOracleSQLServer2012-04-0700:47132人阅读评论(2)收藏举报对于组织架构中的员工层次关系我们应该怎么建模呢?如下图所示:此类结构通常有两个主要特点:1、 一个孩子有且只有一个父亲2、 树的深度不确定为了解决这种结构,我们一般会建一张下面的表:方案一(AdjacencyList)CREATETABLEEmployees(employee_idint,employee_namevarchar2(100),parent_idint);每个员工在Employees表中会有一条记录,并通过parent_id来记录其直属领导的employee_id,这样做很简单明了,但是却存在一些弊端。考虑如下问题:1、 如何得到某个员工的直属领导?2、 如何得到某个领导的直属下属?3、 如何得到某个领导全部下属(下属的下属)?问题1、2都很简单,一次自连接就解决了:1、[sql]viewplaincopyselectpar.employee_id,par.employee_namefromemployeespar,employeesselfwhereself.parent_id=par.employee_idandself.employee_id=32012、[sql]viewplaincopyselectchild.employee_id,child.employee_namefromemployeeschild,employeesselfwherechild.parent_id=self.employee_idandself.employee_id=1010但问题3呢?两种人会有两种做法,一种觉得可以在程序里做,把问题2的SQL循环执行最终把结果拼起来就OK了;一种是觉得我可以使用多次自连接,比如我知道这下领导最多有两级下属,我就可以这样做:selectchild.employee_id,child.employee_name,child1.employee_id,child1.employee_namefromemployeesselfinnerjoinemployeeschildonchild.parent_id=self.employee_idleftjoinemployeeschild1onchild1.parent_id=child.employee_idandwhereself.employee_id=1010上面两种方法看似都可以解决问题,但是别忘了此类树结构的一个很重要的特点,那就是深度的不确定性(就算确定,如果层次很深,20级),性能及可扩展性将是一个很大的问题。那怎么办呢?一时间好像看起来别无他法啊。好消息是使用Oracle10g及以上或者SQLServer2005及以上的朋友可以直接使用数据库特有的SQL特性来解决这个问题了。例如在Oracle中可以使用层次查询[sql]viewplaincopyselectEMPLOYEE_ID,employee_namefromemployeesstartwithemployee_id=1connectbyprioremployee_id=parent_i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论