【发布时间】: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