2010-05-16 87 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