我必须将Web应用程序从Twitter获取的消息存储到本地数据库中。存储消息的目的是我需要按层次结构显示这些消息,即用户通过我的应用程序输入的某些消息(即状态更新)是其他消息的子节点(我必须将它们显示为父消息的子列表项) )。我应该使用哪个数据模型邻接表模型或嵌套集模型?我必须管理四种消息类型,每个类别中的消息可以有两个子节点。这里还有一个问题是,在两种情况下,我看到的(实现)都是手动控制输入的,即在嵌套列表中如何引用邻接模型中的父节点或右,左。我的应用程序从Twitter获取消息数据,例如:
foreach ($xml4->entry as $status4) {
echo'
'.$status4->content.'
';
}
因此,它没有手册,任何时候都可以提供任意数量的消息。我如何在来自其的消息之间建立父子关系。目前,用户在与四种消息类型相对应的不同窗口中输入消息,我的应用程序添加了关键字并将其取回以显示在差异窗口中。目前,所有这些消息都是父消息。现在,我如何让用户输入一条消息,该消息可以另存为数据库。
http://dev.mysql.com/tech-resources/articles/hierarchical-data.html
如果要有更多或更少的数据树(从每个根节点开始),请考虑使用嵌套集,因为AL会很慢。
树的深度为2个节点。 即每个父味精可能有两个子节点。
因此,我认为您可以使用Ajacency List,但是正如@Unreason所说,我根本不理解为什么在这里使用树。 去关系。
@FractalizeR:链接已经消失了(幸运的是,新的MySQL所有者starte dto已经成为EVIL,因为隐藏了知识),幸运的是网络存档出现了:web.archive.org/web/20110606032941/http://dev.mysql.com/
当你说
depth of tree is 2 nodes. i.e. each
parent msg could have two child nodes.
我有点迷惑不解了。
如果两个子节点中的每个可以有更多的子节点,那么您所考虑的不是深度,而是节点分支的宽度。
1)深度真的= 2
如果最大深度确实为2(换句话说,所有节点分两步连接到根节点或零级节点;换句话说,对于每个节点,除了父级和祖父母级,就没有其他祖先),那么您甚至可以使用关系型直接进行模型化以存储分层数据(通过自我联接(在最大深度这么低的情况下还不错),或者将数据分为3个实体-祖父母,父母和子女)
2)深度>> 2
如果数字2是宽度并且深度是可变的并且可能很深,则查看嵌套集,并探索另外两种可能性
使用嵌套集的想法,您可以探索几何类型以存储层次结构数据(好处可能并不那么有趣-有用的运算符很少,单一字段,可能是更好的索引策略)
连续分数(基于嵌套集,tropashko提供了泛化,这似乎很有趣,因为他们承诺会改善嵌套集的某些问题;尽管没有实现,但是请自己做测试)。
实际上,现在我得到了主管的确认,树的深度可能是任意的。 用户可以在任何子级别添加任意数量的节点
只是提到我没有列出任意深度的自连接表选项,因为您使用的是mysql,它不支持递归查询。 如果您不习惯使用mysql,也可以探索该选项-例如在postgres上。