我有一個需要「簡單」家族樹的應用程序。我希望能夠執行查詢,爲家庭成員提供一個身份證號的整個家庭提供數據。我說簡單是因爲它不需要考慮收養或任何其他不明朗因素。對於應用程序的要求如下:近親免疫數據庫結構
- 任何兩個人將無法繁殖,如果他們來自同一個基因線
- 需要允許增加新的家系(新人們提供沒有以前的家庭)
- 通過我在未來與數據庫的結構合理麻煩查詢
需要能拉兄弟姐妹,父母分開。到目前爲止,我已經提出了兩種解決方案,但它們不是很可靠,可能會很快失控。
解決方案1涉及在people表中放置family_ids字段並存儲唯一系列ID的列表。每次兩個人繁殖時,列表被互相檢查以確保沒有ids匹配,並且如果所有內容都會檢出,將合併兩個列表並將其設置爲孩子的family_ids字段。
例子:
Father (family_ids: (null)) breeds with Mother (family_ids: (213, 519)) ->
Child (family_ids: (213, 519)) breeds with Random Person (family_ids: (813, 712, 122, 767)) ->
Grandchild (family_ids: (213, 519, 813, 712, 122, 767))
等等等等......我這個看到的問題是列表變得隨着時間的推移不合理的大。
解決方案2使用CakePHP的協會宣佈:
public $belongsTo = array(
'Father' => array(
'className' => 'User',
'foreignKey' => 'father_id'
),
'Mother' => array(
'className' => 'User',
'foreignKey' => 'mother_id'
)
);
現在遞歸設置爲2將獲取的父親和母親的結果,與他們的母親和父親一起,等等等等一路下線。這條路線的問題是數據是嵌套數組,我不確定如何有效地處理代碼。
如果任何人能夠引導我走向最有效的方式來處理我想要達到的,這將是非常有益的。任何和所有的幫助非常感謝,我很樂意回答任何人的問題。非常感謝。
我還想補充一點(儘管在我完成這些寫作和擺弄之後,我的一部分尖叫着我),你可能會考慮使用面向圖形的數據庫來完成這項任務。例如,我使用[Neo4J](http://neo4j.org/)的時間很愉快。 ) – raina77ow 2012-07-07 16:50:45
非常好,非常感謝。這個例子也很有幫助。 – 2012-07-07 19:24:34
是否有可能輕鬆檢索有序的樹(或一些固定的世代:fe.4或5)只知道一個people.id? – Danilo 2013-02-18 12:59:30