2011-08-29 93 views
0

我有章,分章,節的一本書的結構,款,第二十和subarticles的數目不詳,分subarticles,分次subarticles等SQLite的結構建議

什麼是結構的最佳方式? 一個表與子 - 父母關係,多個表?

謝謝。

回答

1

在關係數據庫中有幾種方法可以保存樹結構。最常用的是使用父指針和nested sets

第一個數據結構非常簡單,即指向每個對象上相應父元素的指針,因此易於實現。缺點是不容易對它進行一些查詢,因爲樹不能完全遍歷。您需要每層的自連接。

嵌套集更容易查詢(當你已經理解它是如何工作的)但更難更新。許多寫操作需要對樹中的其他對象進行附加更新,這可能會使其更難以過渡保存。

第三個變體是materialized path,我個人認爲這是前兩者之間的一個很好的折衷。這就是說,如果你想存儲任意大小的樹(例如,對於節,子節,子節,...),你應該使用提到的樹實現之一。如果您的最大深度非常有限(例如最多3層),則可以創建明確的數據結構。但因爲事情總是比最初複雜得多,所以我建議你使用真正的樹實現。

+0

謝謝,我稍後會看看鏈接。我確實需要遍歷查詢樹。 – Francisc

4

要確定是否有單獨的表格或涉及到一個大表格,您應該仔細查看每個項目 - 章節,子章節等 - 並確定它們是否與其他屬性具有不同的屬性。一章是否帶有與子章不同的內容?

如果是這樣,那麼你正在查看章節,子章節,章節,子章節,文章的單獨表格。文章對我來說依然感覺與你的次級子等分等。

如果不是,那麼也許它是一張有父母/小孩的大桌子,但看起來你可能正在談論'名字'表示層次的深度,這又讓我再次偏向單獨的表格。

另請考慮您將如何查詢以及您將要搜索的內容。

+2

如果數據是相同的,但可能對於某種「級別標識符」,則將其設爲一個遞歸表。如果有不同的數據 - 比如說,如果章節有單獨的作者,但較低的層次沒有,而文章有腳註但更高的層次不等,那麼你需要不同的表格。我不會太教條,就像在一個層次上有一個額外的列,並且你可以無害地使其在其他層次上爲空,好吧,保存在一個表中。但是,如果存在很多差異,那麼他們確實是不同的實體。 – Jay

+0

謝謝,我唯一的問題就是如果我有一個像Parent-> child 1-> child 2-> child 3的東西,我如何選擇孩子3的Parent作爲例子。我需要用查詢來做到這一點。 – Francisc