2010-02-14 12 views
0

我有關於關係數據庫和層次結構的最佳實踐的問題。我的問題是,使用基於文本或int(id)的層次結構更理智嗎?int(id)或基於文本的層次結構?

我有一個層次結構,但它不是一個基於id的。層次結構基於文本 ,例如'level1','level2',而不是id1,id2

我使用mysql和solr來管理我的數據。

目前我保留了文本層次結構,所以如果我願意的話,也可以使用它。但是,創建一個id層次結構似乎更健康(我也完成了這項工作)。 Int(id)層次結構似乎也更快,並不真正傾向於非標準化的數據(我從來不必修剪()ID等)。

任何想法都非常感謝。找出別人覺得最好的做法是很有趣的。

乾杯

回答

1

我傾向於同時使用,如果我需要獲取子樹。

行有2個int列,由id和parentId組成。這構成了樹結構。

另外我還有一個文本級別,代表父行的索引。例如idName =「44.21.31」的行的ID爲31,父ID爲21,其父母的ID爲44.這樣你可以獲取子樹,其中idName類似於「44.21。%」取id爲21的行的每個孩子,大孩子等等。

雖然現在已經破壞了正常形式,但現在有了關於實體id的冗餘信息 - 但它可能是值得的,特別是對於db系統否則不支持層次結構。

+0

我一直都像你提到的一樣,所以如果我需要使用文本信息,那麼它是可能的。感謝你,真的爲我清除了一些東西。 我會看看我如何去,如果我遇到速度問題,我想我總是可以刪除冗餘數據。非常感謝這些答案。 – 2010-02-14 16:31:10

1

我更喜歡使用整數 - 它們是速度更快,體積更小,不需要像一個基於文本的人們可能會改變,因爲它們不包含思邁特意義。

+0

我很高興你說這個:)。我不是一個完全noob,但也不是一個數據庫wizzkid要麼。我認爲我正朝着正確的方向前進,速度至關重要,而且Int也是維持層級間嚴格關係的最佳方式。改變這也將是我的應用程序的一個很大的解決方法,所以真的很高興你覺得這是最好的方式。 我不知道我會做什麼沒有stackoveflow。希望你有美好的一天。 – 2010-02-14 15:37:14

1

如果使用基於id的層次結構,將會有更好的性能。但是你可以在你的數據庫中使用兩列,爲你保留兩個代碼(IDCode和Code)。這個代碼是這樣做:

兒童代碼= IDCODE +父代碼

做的注意,IDCODE是獨一無二的。

此解決方案不好,因爲您需要一些操作來處理此工作。