【问题标题】:modeling hierarchy/directory in a relational database在关系数据库中建模层次结构/目录
【发布时间】:2011-10-15 02:56:49
【问题描述】:

我想在 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   |
-----------------------------

【问题讨论】:

  • 有什么问题?你为你的问题定义了一个合理的模式。您需要限制方面的帮助吗?存储属性/标签?
  • 我的问题是是否有比我提出的方法更好的方法。我担心每个元素与大量标签的链接。加入费用。
  • 最好的解决方案是满足您的要求(包括性能要求)的解决方案;你试过你在这里设计的东西吗?哪里失败了?
  • 我已经尝试过了,但我不太可能模拟 prod 环境。状况。我只能在我的本地电脑上测试,速度很快。由于层次结构的建模看起来不错,我相信当我将此表与标签表连接时会遇到性能问题。我正在寻找一种非规范方法作为替代方案。
  • 好吧,如果您不能模拟类似生产的环境,那么您将在黑暗中拍摄实际设计的结果。你只会在这里得到通用的最佳实践的东西。它纯粹是一个 YMMV 帮助系统......总是留给帮助者来接受建议并用实际数据进行测试。

标签: mysql data-structures tree data-modeling hierarchical


【解决方案1】:

一个非常快速的层次树是一个嵌套集合或一个 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. Is it possible to make a recursive SQL query?
  6. http://www.cybertec.at/pgbook/node122.html

【讨论】:

  • 这些概念的链接或解释会很好。
  • 你打赌!这是一个值得 +2 的答案。
猜你喜欢
  • 2018-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多