2

我想在 mysql 表中对如下所示的层次结构/目录进行建模。你可以在下面看到我在想的表模式。但是,我谈论的目录将由 100.000 个元素组成,深度约为 5-10 级。此外,我们将有一个标签池,目录的每个元素都可以链接到一个或多个标签。所以我想知道是否有更好的方法。我读到有些人决定设计不规范的表来影响高性能,我也在评估这个案例。

ps:有些人使用多路树在编程语言级别对此进行建模,所以问题是如何在数据库中结束的。

hierarchy:
A
| -> 1
     |->1
     |->2
| -> 2
| -> 3
B
| -> 1
| -> 2

table:
 ___________________________
| id      |element | father |
|---------------------------|
|  000    |   A    |  null  |
|  001    |   1    |  000   |
|  002    |   1    |  001   |
|  003    |   2    |  001   |
|  004    |   2    |  000   |
|  005    |   3    |  000   |
|  006    |   B    |  null  |
|  001    |   1    |  006   |
|  002    |   2    |  006   |
-----------------------------
4

1 回答 1

5

一个非常快速的层次树是一个嵌套集或一个 Celko-tree,它有点像一个二叉树,或者当你有一个 MySQL 存储引擎时的一个霍夫曼树。缺点是删除和插入代价高昂。其他 RDBMS 也支持递归查询。一般来说,我没有看到很多嵌套集。创建和维护似乎也很复杂。当嵌套集太复杂并且 RDBMS 不支持递归查询时,还有物化路径。

  1. http://www.ibase.ru/devinfo/DBMSTrees/sqltrees.html
  2. http://en.wikipedia.org/wiki/Binary_tree
  3. http://en.wikipedia.org/wiki/Huffman_coding
  4. http://www.postgresql.org/docs/8.4/static/queries-with.html
  5. 是否可以进行递归 SQL 查询?
  6. http://www.cybertec.at/pgbook/node122.html
于 2011-07-28T13:11:39.763 回答