2010-05-16 109 views
2

目前在我的应用程序中,我有一张表给我一些麻烦。手头的问题是我有一个映射到这个表的值对象。当数据作为值对象数组返回给我时,我必须循环访问该数组,并通过将ParentID与父对象ID进行匹配来开始递归。更好的数据结构设计

ParentID列可以是null(作为父对象),也可以是ObjectID的值。

我知道必须有更好的方法来创建这个数据结构,以便我不必执行递归循环来匹配ParentID和ObjectID的。

任何帮助,这是非常感谢。

下面是表中描述形式:

+----------------+------------------+------+-----+---------------------+-----------------------------+ 
| Field   | Type    | Null | Key | Default    | Extra      | 
+----------------+------------------+------+-----+---------------------+-----------------------------+ 
| ObjectID  | int(11) unsigned | NO | PRI | NULL    | auto_increment    | 
| ObjectHeight | decimal(6,2)  | NO |  | NULL    |        | 
| ObjectWidth | decimal(6,2)  | NO |  | NULL    |        | 
| ObjectX  | decimal(6,2)  | NO |  | NULL    |        | 
| ObjectY  | decimal(6,2)  | NO |  | NULL    |        | 
| ObjectLabel | varchar(255)  | NO |  | NULL    |        | 
| TemplateID  | int(11) unsigned | NO | MUL | NULL    |        | 
| ObjectTypeID | int(11) unsigned | NO | MUL | NULL    |        | 
| ParentID  | int(11) unsigned | YES | MUL | NULL    |        | 
| CreationDate | datetime   | YES |  | 0000-00-00 00:00:00 |        | 
| LastModifyDate | timestamp  | YES |  | NULL    | on update CURRENT_TIMESTAMP | 
+----------------+------------------+------+-----+---------------------+-----------------------------+e 
+0

您是否使用SQL Server?如果是这样的话,SQL Server 2005已经构建了处理分层数据结构。您可以创建一个公共表达式以递归方式进行查询。 – RMorrisey 2010-05-16 09:49:26

+0

我没有使用SQL Server,我之前使用过CTE。我正在使用MySQL。 – Tempname 2010-05-16 09:52:16

回答

2

你可以使用嵌套的集模型。请看这里的非常好的解释:http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

+0

这个例子的问题是,我仅限于我选择的孩子的数量。在我目前的发展中,我需要维护一个概念,任何父母都可以有无数的孩子。 – Tempname 2010-05-16 09:57:56

+1

@Tempname:嗯...我不明白问题。你可以使用一个嵌套集合和无限的孩子​​。我没有使用超过100-150种物品,但我不明白为什么你不能。 – nico 2010-05-16 10:11:06