【发布时间】:2011-04-23 01:08:16
【问题描述】:
我正在设计一个将使用 Oracle 的应用程序,并且我们有这个部门层次结构,我们需要将其映射到我们的数据库中。一些看起来像这样的东西(我很确定你们都知道我在说什么,但我会附上 ERD 的一部分以防万一):
所以它将存储如下所示的数据:
[1 | 0]
[2 | 1]
[3 | 2]
[4 | 2]
换句话说:
Department 1
|__Department 2
|___Department 3
|___Department 4
等等……
这将增加表上所需的记录数量,并且可以使用 CONNECT BY 命令访问数据,每个部门只有 1 条记录。我们通常采用这种树结构作为解决方案,但在这个新应用程序中,性能至关重要,所以我想知道如果我有一个看起来像这样的扁平表会怎样。
[1 | 0]
[2 | 1]
[3 | 1]
[3 | 2]
[4 | 1]
[4 | 2]
这使您可以建立非常明显的关系,而无需知道给定孩子的父部门即可知道他们的上层部门是谁。但这会增加所需的数据量,因为您需要一个部门所在的每个级别的记录,这意味着如果一个部门有 15 个级别低于最高级别,我们将需要 15 条记录。 该部门非常大,因此最终可能会变成一张巨大的表(大约 200 万条记录)。
好的,简单介绍完之后就是这个问题了;有没有人真正尝试过这个可以告诉我这两个选项之间的数据库更快/更便宜的是什么?巨大的平表或小树之一?
【问题讨论】:
-
这提醒我检查
CONNECT BY语法(自 v2 起受支持)和 Oracle 从 11gR2 起才开始支持的递归 WITH(分层/递归查询的 ANSI 标准)之间是否存在性能差异。 .
标签: sql oracle database-design oracle10g query-optimization