数据库设计 (一)树形结构

  1. 引言
    1. 曾经听说过一句经典俗语“思想决定思路,思路决定出路”,一句话道出了大智若愚的真理,从表面上我们可以知道一个人一定要由思想,也表明了思想为什么会是重要的思想是看不见摸不着的东西,如果大谈思想的东西文章可能就会变成专业软文,这是因为你的思想没有付诸行动、没有量化到细节,即没有做到实事求是。
    2. 说得有点远了不过同这篇博客的主旨并没有北辙,社会、工作、生活等各个方面都由不同层次结构的万物构成,举个最简单、最贴近自己的例子Family Tree,每个人都有一个家谱容纳了你们家的祖祖辈辈,现在问题是如何将各种形形色色类似于家谱的这种结构存储于表结构中,设计一张表来存储这样的千千万万中信息,学过数据结构的人很容易想到二叉树、树存储方法有很多种,这里给大家介绍最简单的一种树结构实现。
  2. 面向对象设计
    1. 一切事物皆对象,我们要表达的事物都可以通过对象来描述,下面是一个对象图表示自身关联

    2. Java实体类代码
    3. package com.bjsxt.oa.model;
      
      import java.util.Set;
      
      /**
       * 
       * @author lilongsheng
       *@hibernate.class table="T_Orgnization"
       */
      public class Orgnization {
      
      	/**
      	 * @hibernate.id
      	 * 		generator-class="native"
      	 */
      	private int id;
      
      	/**
      	 * @hibernate.property
      	 */
      	private String name;
      	/**
      	 * @hibernate.property
      	 */
      	private String sn;
      	/**
      	 * @hibernate.property
      	 */
      	private String description;
      	
      	/**
      	 * @hibernate.many-to-one
      	 * 		column="pid"
      	 */
      	private Orgnization parent;
      	/**
      	 * @hibernate.set inverse="true" lazy="extra"
      	 * @hibernate.key column="pid"
      	 * @hibernate.one-to-many class="com.bjsxt.oa.model.Orgnization"
      	 */
      	private Set children;
      
      }


    4. 映射文件
    5. <?xml version="1.0" encoding="ISO-8859-1"?>
      <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
      
      <hibernate-mapping>
        <class table="T_Orgnization" name="com.bjsxt.oa.model.Orgnization">
          <id name="id">
            <generator class="native"/>
          </id>
          <property name="name"/>
          <property name="sn"/>
          <property name="description"/>
          <many-to-one column="pid" name="parent"/>
          <set lazy="false" inverse="true" name="children">
            <key column="pid"/>
            <one-to-many class="com.bjsxt.oa.model.Orgnization"/>
          </set>
        </class>
      </hibernate-mapping>
      


    6. 表结构

    7. 界面效果

  3. 这种树形结构实现比较简单、常用,在很多系统中都是采用这种方式实现,尤其在很多组织机构单位都是一层一层的管理,除了这种也有矩阵、网状等结构的存储会稍加复杂一点,掌握好基础是前进的动力,必须做好基础,经济基础决定上层建筑,说得也是基础的重要性。
posted @ 2013-11-22 15:35  李龙生的博客  阅读(930)  评论(0编辑  收藏  举报