2017-01-24 124 views
-1

我正在和我的朋友討論這個問題,我不明白這個主意。每個帶有這個概念的元組都有一個parent_id。然而,我不知道如何通過使用這個屬性作爲參考來遍歷二叉樹。我試圖在數據庫中模擬聖經。聖經是由兩個當代空間構成的,這些空間是與書籍相關的新舊約。這些章節和章節與章節相關。我希望能夠通過url存儲數據庫中的特定段落。每個網址都會與佈道和解釋相關聯。我打算爲每個類創建一個表,所以模式看起來像這樣。如何在數據庫表中創建二叉樹的概念?

contemporaryspace(ID int,oldornew string) 
books(ID int,whichbook string) 
chapters(ID int,which_chapter string) 
passages(ID int,which_passage string) 

我對數據庫是完全陌生的,並計劃這麼做;然而,一位朋友告訴我,這是一個壞主意,最好把一張桌子變成二叉樹來實現我的目標。

+1

標籤'sql'是不夠的......你的問題可能對你很清楚,但它不適用於外部。請使用[編輯鏈接](http://stackoverflow.com/posts/41818528/edit)並添加適當的標籤(RDBMS包含版本)並提供更多詳細信息,最好是一個示例場景和一個*明確的問題*。否則,這將很快關閉... – Shnugo

+1

SO警察工作非常快,無情:-)但你編輯你的問題,並提供更多的細節。我投票重新開放,但:請添加您想要使用的RDBMS。特別是分層數據的處理方式很不一樣...... – Shnugo

+1

嘿,這將會很有趣:-)不,你不應該添加標籤'rdbms',而是要使用的實際SQL系統(MySQL,Oracle,MS SQL Server ,無論...)並請添加版本! – Shnugo

回答

0

如果一方家長少於或多於兩個孩子,那麼該樹不是二元的。

如果數據庫中的任何條目的處理方式與其他條目的處理方式不同,則它們具有不同的類型,應該放入單獨的表中。 例如,如果一本書可以有一個作者,但不是一個章節,那麼您不應該在同一個表中存儲關於書籍和章節的信息。

但是,有可能並非所有的表格都是真正需要的。書籍有一個屬性,指定它們是在OT還是NT,這將是一個引用contemporaryspace表的外鍵,但如果contemporaryspace實際上沒有存儲任何有用信息,那麼您不需要該表,並且可以存儲"OT""NT"直接在書本表中。