当前位置:首页 > 开发 > 编程语言 > 数据结构 > 正文

祝贺Javaeye2.0, 关联数据结构

发表于: 2006-08-09   作者:buaawhl   来源:转载   浏览次数:
摘要: Javaeye2.0 社区的版面,感觉很不错。 我也在做一个数据关联结构的开源内容系统。 现在把核心数据结构写在这里,供参考,抛砖引玉。 文中的例子和说明,是和femto讨论的过程中加上的。 ----------------------------------------- 我正在做一个内容组织整理的开源作品。 主要功能是: 能够让用户自由指定homepage (或者
Javaeye2.0 社区的版面,感觉很不错。

我也在做一个数据关联结构的开源内容系统。
现在把核心数据结构写在这里,供参考,抛砖引玉。
文中的例子和说明,是和femto讨论的过程中加上的。

-----------------------------------------

我正在做一个内容组织整理的开源作品。

主要功能是:
能够让用户自由指定homepage (或者其他任何属于自己的page)上显示什么内容,可以任意组织整理。
功能上相当于 CMS + 具有FTP功能的个人空间。

要达到这个目的,需要一个非常灵活的数据结构。all in one, cover all content formats。
我就把这个数据结构,写在这里,和大家讨论,也算是一个具体例子。
Entity 说明如下(用户相关信息省略):

1. Content.
这个Entity 很简单,主要具有一个 name 字段, 和 content 字段。
可以代表 blog, news, tag, directory, topic, thread, article, post, wiki item, etc.

2. Ref
所有的关系都在这里管理。content本身不具有任何关系。
Ref 要达到这样的功能,多对多。任意的 content 之间,都可以组装成父子关系。递归都没有关系。没有任何限制。

id,
target_id

id 就是一个 ref id, alias id.
target id 就是 content id.

3. Ref_relation.

parent_ref_id
child_ref_id

Ref + Ref_Relation 两个table,就可以表述所有的多对多关系。

---------

为什么不用一个 content_relation ( parent_content_id, child_content_id ) 表达多对多,非要多出一个Ref ?
这是为了按照ref提取一棵数据树.
如果只有content_relation,无法确定如何从这些关系中,提取某个确定组织的数据树。
这个理解起来不那么直观,可以思考几个自由组织的例子。

举例,
几个论坛 bbs1, bbs2....
每个论坛都有 A, B, C 等分类。
每个分类都有 a, b, c, 等版块。
每个版块都有 topic
每个topic 都有 reply.

这是一个树形结构数据。

wiki 也是一个树形结构数据。


我设想的结构中,任何一个content item 可以出现在任何地方,多次出现。毫无限制。

比如,我有一个content item,叫做 "新世纪"

我想,让它成为 BBS1 下面的分类。

那么。Ref 数据
id,       target_id
1001,   bbs1
1002,   新世纪 

----------------------

ref_relation 数据
parent, child
1001 , 1001

----------------------

这样就可以了。
其实这个就是用来表达

parent, child
bbs1 , 新世纪

这个父子关系。
多出来一个Ref是为了提取数据的需要。
设想一个多层数据的例子,就会发现简单的 parent child 不够用。必须多出来一个Ref。

想想看这样的例子。
现在content table 就有一个 新世纪 记录。

现在需要构成一个这样的树形结构。

新世纪
|- 新世纪
.........|- 新世纪
.........|- 新世纪
................| - 新世纪
|- 新世纪

如何表达?用简单的parent child根本没有办法。
用ref就没有问题。

Ref数据
id,       target_id
1001,   新世纪
1002,   新世纪 
1003,   新世纪
1004,   新世纪 
1005,   新世纪
1006,   新世纪 

----------------------

ref_relation 数据
parent, child
1001 , 1002
1002,   1003
1002,   1004
1004,   1005
1001,   1006

----------------------


一个更具体的例子。写起来,太麻烦了。就不写了。:D 可以设想出来很多。

为了看起来方便,上面出现 新世纪 的地方。实际上是 新世纪 这个内容对应的 content ID。

数据核心结构就是这么多. 具体让它工作起来, 来需要更多的辅助数据结构. 比较繁琐, 不再赘述.

大家可能有更好的设计方案。
我把自己的基本设计写在这里,抛砖引玉。


femto:
可不可以把你的ref理解成alias,一个content可以有多个别名,这样可以在多个地方被引用?

my answer:
对阿。
ref引用就是alias的意思。
文件系统中的快捷方式link.
多个virtual node指向真正的node。

祝贺Javaeye2.0, 关联数据结构

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
绝影的《疯狂》将在明天的SD大会上现场签售。 首先得祝贺绝兄弟,用了近一年的心血终于盼来了这个日
不过怎么都高兴不起来-_-# 8叉树分割数千个球组成的空间,每个空间的最大面数为1000。 空间本身只是
感谢前团队的照顾和培养,现在这个项目上线了,看到了心里非常高兴,心里还是很想念你们的,特别是
等了好久终于等到这天,盼了好久终于把梦实现…… 今天河北省的软考成绩新鲜出炉了,两个学长怀着激
2011-11-16在CSDN开博,再过7天,就满11个月了。 今天有一个非常值得庆祝的事情----我的CSDN博客访
经过7天的努力,终于搞定了bsp基本分割算法和portal自生成算法了。 现在在网吧,不太方便,只有图可
为祝贺 Firefox 6 的正式发布,微软按例给 Mozilla 送去了蛋糕。事实上,微软就今年已经赠送了 3 次
1 #include<stdio.h> 2 3 int main() 4 { 5 int i,j,k; 6 int n,m; //n:用于记录图中的节点
要学习关联容器,就必须先知道什么是pair,pair是关联容器的某一对键值对的表示,也就是关联容器的v
【摘自《数据挖掘导论》】 关联分析用于发现隐藏在大型数据集中的有意义的联系,例如通过分析大量购
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号