2011-08-17 68 views
0

哎呀,caramba! - enter image description here 這就是揪着我的非計算機專業的小腦袋 - 請幫助用戶(組) - 項目(文件夾),樹狀結構的多根數據庫

我可能有兩個DB表 - 第一個用戶(文件夾)表,該表是一個樹狀結構(父子)(usersorganised成客戶或文件夾) 其完全可編輯的新結構(parentid left right etc)需要經常重寫

然後我有一個項目(文件夾)表樹結構 - 相同的東西 - 可編輯所以添加,刪除,複製,粘貼,移動......如http://www.jstree.com/demo - (PHP MYSQL可編輯功能)

注意我認爲樹的深度很少超過5,所以深度優先並不是真的有必要......儘管我正在考慮它(更安全) - 但是會有很多項目中的一個可能並且有可能用戶。

只要在googleing了一段時間後尋找一點方向...... 問題1 - 一桌還是兩桌? - 一張桌子是可愛的......只有整個DBtable需要重新寫入保存,如果我移動文件夾。考慮到這種結構需要監視所有的用戶和項目...它的一個大的SQL更新

問題2 - 多根樹結構...如果我只是想訪問結構在說...用戶5(根)玩耍並保存我正在打開自己的樹的一部分,直到左/右/身份證正在腐敗。

基本上,需求是讓用戶登錄 - 然後他們可以管理可以組織到文件夾(客戶端)中的用戶結構。 然後允許那些登錄用戶將項目文件夾(組織項目)添加到其他用戶,並具有能夠跨用戶複製(添加,重命名,移動,刪除)項目文件夾的功能......以便這些用戶(當登錄in)只能查看這些項目。

pheew。希望我已經解釋了這個問題

+0

的問題是真正的樹結構的更新和什麼數據庫,甚至XML/JSON struture會最好的處理這個。 – Murray

+0

只是爲了澄清實際的用戶數據將保存在不同的表格中,就像項目數據一樣。它簡單地管理關係 – Murray

+0

得說,即時考慮爲每個根用戶關係的XML文件...任何意見? – Murray

回答

1

我與我們的一位頂級DBA交流了一些關於此事的幫助。

這些類型的設計的主要問題不是表的數量,而是使用的類型。

如果是單用戶系統,使用一個表不是問題,管理有點麻煩,但合併命令可以在這裏幫助。

如果數據要被許多用戶同時訪問,這種結構會導致鎖定問題。 「

」我會選擇兩張桌子,第一張拿着數據,第二張拿着父子關係信息。如果您有多個關係項目 ,即擁有多個子項的父項,關係中會有多行表。(甲骨文都採用這種方式爲他們的外鍵關係(父子))」

希望這有助於

+0

感謝Auralia - 現貨!它的使用類型...合併命令將是偉大的...只有我使用MySql 5.0 - 數據將需要被許多用戶同時訪問 - 因此更新問題。一個用戶編輯時鎖定數據庫將是一個解決方案,但並不理想 – Murray

+0

道歉 - MERGE可以通過「重複密鑰更新」 – Murray