【问题标题】:Why do we need nested table columns? [closed]为什么我们需要嵌套表列? [关闭]
【发布时间】:2018-01-28 16:11:15
【问题描述】:

上周我在使用 Oracle DB 时遇到了嵌套表和对象。我知道如何创建嵌套表以及如何存储值存储值,但我很难看到大局。为什么我们需要嵌套表?为什么我们不能创建两个普通表并用外键链接它们?创建两个表不是更容易吗?

谢谢

【问题讨论】:

  • 只是我的意见:是的,有两个表更容易和更简单。嵌套表——这是一个nice 特性(好像Oracle 想说“看看我们能做什么!”),但除了教育目的之外,我从未使用过它们。其他人可能有不同的经历和意见,这完全可以。
  • 可能会有一些主观性来回答这个问题,因为您在 SQL 之前使用了“更简单”但子值/多值列 - 例如 Pick / Universe。 TL;DR 是连接不是免费的。一个示例用法是系统中的发票和行项目,其中始终需要检索所有发票数据并且不需要单独查询行项目。嵌套表与 NoSql 文档数据库有一些共同点。
  • @StuartLC - 加入不是免费的。没错,但是 RDBMS 产品具有为连接数据而优化的引擎。此外,非规范化数据结构不是免费的。不仅语法比带有简单表的 SQL 更笨拙,而且它们对我们如何使用数据施加了限制(您在警告中承认,“不需要单独查询行项目”:始终需要单独查询订单项)。
  • 类型和嵌套表作为编程对象非常有用,特别是对于在 PL/SQL 过程之间交换数据和管道函数。过去 20 年来,我几乎所有的应用程序都使用过它们。但是几乎不需要将列声明为类型或嵌套表:in fact it can be quite dangerous, as I discuss in this other SO thread。显然有所谓的非结构化数据的用例,例如 LOB、XML 和 JSON,但这些通常是边缘情况。

标签: sql oracle user-defined-types


【解决方案1】:

总的来说,你是对的。创建附加表并将其与基表链接起来更容易。事实上,Oracle 正在这样做,它创建一个(隐藏)表并向您的基表添加一个(隐藏)列以链接它们。

当我有一个大型应用程序时,我偶尔会使用它们,比如说数百个表,这个应用程序必须共同提供导入/导出功能。在这种情况下,表格设计必须与结构或外部数据(例如 XML 文件)保持一致。然后可以更轻松地使用嵌套表,以便拥有更通用的导入/导出过程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多