在软件项目中,经常会遇到层次数据的处理问题,比如产品分类、树型目录、企业组织结构等等。一般情况下,这些数据不得不存储在关系数据库中,由于关系数据库表是扁平的二维结构,所以必须将层次数据平面化,才能适应关系模型的存储访问模式。目前基于此的转换方法很多,流行的主要有四种:多表模式、邻接表模式、编码模式、改进的前序前历模式。本文在收集整理的基础上,通过实例对比、分析、探讨,希望给不熟悉的朋友提供一些参考。
首先给出一个问题,是一个商品分类的例子,需要在关系数据库中存储和处理,为了简便起见,分类的层次尽量的少,并且在下文中只讨论处理分类,而并不涉及到具体产品内容。如图所示。
一、多表模式:
多表模式就是用多表来存储层次数据,方法是每一层用一张表表示,这是一种非常原始的方法,不过很好理解,在数据层次很少的,三层以下,特别是两层中得到了广泛的应用。上面的问题可以用三张表分解,根“商品”这一层在此可以是虚拟的,表中可以省略。
1、 一级分类表(table1):
Id |
Title |
1 |
电器 |
2 |
服装 |
2、 二级分类表(table2):
Id |
Title |
Parent |
11 |
电视 |
1 |
12 |
冰箱 |
1 |
13 |
空调 |
1 |
14 |
成人 |