论坛首页 Java版 企业应用

数据库中树状数据结构的设计

浏览 875 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2007-11-12
现在很多购物网站,例如淘宝,分类信息网...有很多类目信息,这些类目呈树状结构,都知道,在关系型数据库中设计树状结构是很头疼的事情,要考虑到效率,直观,性能,数据完整性方面的因素,比如说什么中值排序基数法,最近看到apache上的native xml db的项目Apache Xindice,把类目数据组织成xml存在Xindice中,这种基于XPath Query的搜索速度以及管理xml解决方案会不会很好,有人做过这方面的尝试吗?
   
最后更新时间:2007-11-12
我也查这方面的资料!你看这个设计的怎么样? http://www.blogjava.net/davidxu/archive/2005/08/17/multilevelTree.html
   
0 请登录后投票
最后更新时间:2007-11-12
mysql> desc CMS_CHANNEL;
+-----------------+--------------+------+-----+---------+-------+
| Field           | Type         | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+-------+
| sChannelId      | varchar(20)  | NO   | PRI |         |       |
| sChannelName    | varchar(20)  | NO   |     |         |       |
| sDisplayName    | varchar(20)  | YES  |     | NULL    |       |
| lChannelModalId | bigint(20)   | YES  |     | NULL    |       |
| sChannelPage    | varchar(255) | YES  |     | NULL    |       |
| iListLines      | int(11)      | YES  |     | NULL    |       |
| sSubDNS         | varchar(40)  | YES  |     | NULL    |       |
| sKeywords       | varchar(255) | YES  |     | NULL    |       |
| lDetailModalId  | bigint(20)   | YES  |     | NULL    |       |
| sDetailPage     | varchar(255) | YES  |     | NULL    |       |
| iStatus         | int(11)      | YES  |     | NULL    |       |
| lLastAccess     | bigint(20)   | YES  |     | NULL    |       |
+-----------------+--------------+------+-----+---------+-------+
12 rows in set (0.00 sec)

mysql> select sChannelId, sChannelName, sDisplayName, sDetailPage from CMS_CHANNEL where sChannelId like '01%';
+------------+--------------+--------------+----------------------------------------------------+
| sChannelId | sChannelName | sDisplayName | sDetailPage                                        |
+------------+--------------+--------------+----------------------------------------------------+
| 01         | 基金         | /news        | /news/yyyy/MMdd/HHmmss{article}.html               |
| 0101       | 基金动态     | jjdt         | /news/jjdt/yyyy/MMdd/HHmmss{article}.html          |
| 0102       | 基金公告     | jjgg         | /news/jjgg/yyyy/MMdd/HHmmss{article}.html          |
| 0103       | 基金焦点     | jjjd         | /news/jjjd/yyyy/MMdd/HHmmss{article}.html          |
| 0104       | 基金市评     | jjsp         | /news/jjsp/yyyy/MMdd/HHmmss{article}.html          |
| 0105       | 基金看市     | jjks         | /news/jjks/yyyy/MMdd/HHmmss{article}.html          |
| 0106       | 基金人语     | jjry         | /news/jjry/yyyy/MMdd/HHmmss{article}.html          |
| 0107       | 基金评级     | jjpj         | /news/jjpj/yyyy/MMdd/HHmmss{article}.html          |
| 010701     | 晨星评级     | cxpj         | /news/jjpj/cxpj/yyyy/MMdd/HHmmss{article}.html     |
| 010702     | 理柏评级     | lbpj         | /news/jjpj/lbpj/yyyy/MMdd/HHmmss{article}.html     |
| 010703     | 银河评级     | yhpj         | /news/jjpj/yhpj/yyyy/MMdd/HHmmss{article}.html     |
| 0108       | 基金研究     | jjyj         | /news/jjyj/yyyy/MMdd/HHmmss{article}.html          |
| 0109       | 投资策略     | tzcl         | /news/tzcl/yyyy/MMdd/HHmmss{article}.html          |
| 0110       | 基金重仓     | jjzc         | /news/jjzc/yyyy/MMdd/HHmmss{article}.html          |
| 0111       | 交易提示     | jyts         | /news/jyts/yyyy/MMdd/HHmmss{article}.html          |
| 0112       | 产品分析     | cpfx         | /news/cpfx/yyyy/MMdd/HHmmss{article}.html          |
| 0113       | 数字论市     | szls         | /news/szls/yyyy/MMdd/HHmmss{article}.html          |
| 0114       | 策略报告     | clbg         | /news/clbg/yyyy/MMdd/HHmmss{article}.html          |
| 0115       | QFII·QDII   | qfii         | /news/qfii/yyyy/MMdd/HHmmss{article}.html          |
| 0116       | 海外基金     | hwjj         | /news/hwjj/yyyy/MMdd/HHmmss{article}.html          |
| 0117       | 私募基金     | smjj         | /news/smjj/yyyy/MMdd/HHmmss{article}.html          |
| 0118       | 社保基金     | sbjj         | /news/sbjj/yyyy/MMdd/HHmmss{article}.html          |
| 0119       | 企业年金     | qynj         | /news/qynj/yyyy/MMdd/HHmmss{article}.html          |
| 0120       | LOF基金      | lof          | /news/lof/yyyy/MMdd/HHmmss{article}.html           |
| 0121       | ETF基金      | etf          | /news/etf/yyyy/MMdd/HHmmss{article}.html           |
| 0122       | 基金法规     | jjfg         | /news/jjfg/yyyy/MMdd/HHmmss{article}.html          |
| 0123       | 基金学校     | college      | /news/college/yyyy/MMdd/HHmmss{article}.html       |
| 012301     | 基本概念     | jbgn         | /news/college/jbgn/yyyy/MMdd/HHmmss{article}.html  |
| 012302     | 基本费用     | jbfy         | /news/college/jbfy/yyyy/MMdd/HHmmss{article}.html  |
| 012303     | 基金运作     | jjyz         | /news/college/jjyz/yyyy/MMdd/HHmmss{article}.html  |
| 012304     | 基金史馆     | jjsg         | /news/college/jjsg/yyyy/MMdd/HHmmss{article}.html  |
| 012305     | LOF知识      | lofzs        | /news/college/lofzs/yyyy/MMdd/HHmmss{article}.html |
| 012306     | ETF知识      | etfzs        | /news/college/etfzs/yyyy/MMdd/HHmmss{article}.html |
| 012307     | 基金理财     | jjlc         | /news/college/jjlc/yyyy/MMdd/HHmmss{article}.html  |
| 0124       | 财经要闻     | cjyw         | /news/cjyw/yyyy/MMdd/HHmmss{article}.html          |
+------------+--------------+--------------+----------------------------------------------------+
35 rows in set (0.00 sec)
   
0 请登录后投票
最后更新时间:2007-11-12
这是以前的一个CMS频道分类设计
现在的有所变动,主要是在目录计算的地方.
大体意思是通过自定义Id的方式.

Id 步长 2位
那么一级分类为:01~99
varchar(20) / 2 = 10 那么Id 01~99999999999999999999
如果你觉得分类不够用的可以加大步长

级次关系
01
--0101
----010101
----010102
--0102
--0103
02
   
0 请登录后投票
最后更新时间:2007-11-13
select sChannelId, sChannelName, sDisplayName, sDetailPage from CMS_CHANNEL where sChannelId like '01%';

用like查询性能效率会不会是个瓶颈,如果访问量很大的话?
   
0 请登录后投票
最后更新时间:2007-11-13
这是我罗列部分数据出来给你看的.

这些数据基本上视为死数据,加载在内存中运算.
基于这种方式编码Id,进行各种运算或分类运算我想都很方便.
   
0 请登录后投票
最后更新时间:2007-11-13
bluepoint 写道
这是我罗列部分数据出来给你看的.

这些数据基本上视为死数据,加载在内存中运算.
基于这种方式编码Id,进行各种运算或分类运算我想都很方便.
哦,got it.
   
0 请登录后投票
最后更新时间:2007-11-13
如果要显示象如下图那样,怎么用代码显示数据?
  • 68d57e0f-b357-49dc-99d9-532d9ad832c2-thumb
  • 大小: 385.6 KB
   
0 请登录后投票
最后更新时间:2007-11-13
比如(一):
将分类数据初使化进有序的: TreeMap<sChannelId, Channel>
遍列调用TreeMenu.setChild

主要看你树状菜单的API
比如:
public class TreeMenu
{
   ...
   public static void setChildByParent(String parentId, ...) { // TODO 依据父Id,设定子Id }
   ...
}
  • 44330f71-f117-4b02-888f-1b4f5b89b6f2-thumb
  • 描述: menu
  • 大小: 48 KB
   
0 请登录后投票
最后更新时间:2007-11-14
谢谢bluepoint的分享,以前研究过cms不过对里面的一些机制还不是很了解。
   
0 请登录后投票
论坛首页 Java版 企业应用

跳转论坛:
JavaEye推荐