新闻稿




关系闭包可以将任何SQL选择转换为马赛克


在关系数据库管理系统内,主持久的数据结构被认为是一个逻辑关系。对RDBMS内的数据执行的操作也在逻辑关系中导致逻辑关系。换句话说,一切都是表。从术语“桌子”一句话,让我们使用“网格”这个词。表是网格,类似于具有行,列和标头的电子表格。在处理关系数据库时,一切都是网格。显然,表是网格,视图是网格,并且任何查询的结果都是网格。该网格一致性是由DBMS支持的名为“关系闭合”的术语的一个方面。关系闭合是将数据库管理系统定义为真正关系的那些特征之一和关系关闭的最有趣方面是“网格是一切“关系封闭的其他方面与最小化冗余有关,但这些方面都没有那么有趣。”

一切都是网格

由于一切都是网格,因此任何网格都可以用于代替任何网格。表格,视图和查询可以模糊。这方面是为什么可以将视图描述为简单的“命名”查询。由于一个组成SQL SELECT语句,作者可以使用另一个查询代替任何表或视图。即使是各个列也可以用不同复杂性的查询替换 - 如果结果适合数据类型。这些替换的列可以是SELECT子句中的那些,或者在Anywhere中可以找到列或值的Where子句内的列。由于这种易于更换,可以无限地建立任何查询,类似于墙壁中的分层砖。墙是另一个由砖块组成的网格,也包括网格本身​​。较大的网格可以消耗大量的块,或者任何元素都可以分为越来越多的网格。查询可以轻松包围新的查询。 In doing this wrapping and replacing of columns and tables在需要时,可以将许多页面串起来创建一个非常复杂的单个语句。但是,不广泛推荐实例化复杂SQL的这种做法。

编织一个由互锁SQL组成的大型网络是利用RDBMS中的数据的一种强大方式。旋转这样的代码可以用于好的方面,比如为用户笨拙的数据请求提供非常定制的解决方案。同样的能力也可能被用于不好的地方,比如创建如此疯狂和层次深刻的SQL语句时,试图解开一些东西来做一个小的改变,需要一些繁重的分析和SQL技能。好事和坏事常常同时出现。

较长路线的好处

当然,许多数据库都有限制SQL语句的长度,但您可能会感到惊讶地才能走得更远。当数据需求既具有特定和复杂时,关系闭合的这种特性是有用的。然而工程师在考虑跳进这个兔子洞时应该谨慎。如果一个人发现自己把贝奥武夫(Beowulf)和格伦德尔(grendel)式的许多查询拼接在一起,那么撕下一只手臂仍然是一个好方法。

您必须步入将较大的查询解析为包含它的较小查询元素,然后将其放回返回,并且如您所以,确定需要进行更改的位置。这种方式的详细分析有助于开发人员对怪物查询中发生的许多事情进行了解。或者,初始编码器可以选择保持许多元素分开,并逐一迭代步骤,或许使用沿途来保持中间结果的临时表。虽然以这种方式踩过所需的逻辑可能有点繁琐,但这种较长的路线允许其他人遵循的维护路径。