SQLServerCentral编辑

SQL标准混淆

也许耶和华对看到巴别塔的反应有点苛刻。他战战兢兢地看着一种所有人都能说的简单易懂的语言给人类带来的力量。令人震惊的是,这座塔正在按时交付并符合规格。“他们现在想做的一切都是不可能的。来吧,让我们下去,在那里混淆他们的语言他说,然后把他们分散到国外。

这个传说是现存最古老的传说之一,它将一如既往地引起开发商的共鸣。计算机语言通过其一致性实现其威力。遗憾的是,SQL已经被“混淆”了。SQL-92查询有一个相当一致的声明语法,但除此之外,编写可互操作的基于SQL的应用程序也很困难。

相反,您必须坚持使用特定品牌的关系数据库管理系统。您可以在标准SQL的托儿所斜坡上进行实验,但当您甚至只需要字符串连接或日期处理时,您就会看到不一致。好的,SQL是一种声明性语言,而不是过程性语言,但即使是某些声明性语法也是不同的。您甚至会发现实现是区分大小写的,与SQL标准完全相反。如果苏美尔人的阿拉塔勋爵(约公元前21世纪)今天还活着并正在开发SQL,他会悲伤地摇摇头,充满智慧地祈祷“整个宇宙,戒备森严的人们愿他们用一种语言一起查询数据库

有几个问题阻碍了共享语法的发展。一个问题是SQL标准的复杂性,现在有JSON、时间间隔、模式匹配和多维数组。没有供应商可能会将它们全部添加到下一个版本中,尤其是在需要对现有用户进行重大更改的情况下。另一个事实是,标准人员很晚才决定SQL需要过程扩展,而那时对于函数和批处理等数据库对象的过程代码,有几个不兼容且相互竞争的标准。这导致数据库开发人员面临T-SQL、PL-SQL、PSQL、SQL-PSM、PL/pgSQL、SPL和ABAP,所有这些都是在SQL标准出现之前建立起来的。更糟糕的是,SQL标准严格限制了语法,而没有太多地强调语义。我们可以在不清楚它意味着什么的情况下解析内容,还有一些实现方面,例如索引,它们非常特定于特定的实现。

您不能仅仅将进程委托给中间件。问题是,某些进程(例如表值函数中的进程)可以提供表源,因此它们是数据层的固有进程。ODBC试图为每个数据源提供一致的语法,这是一种高尚的尝试,对于简单的使用来说效果非常好,但必须实现SQL的一个非常简单的子集。这个问题没有明显的解决方案;无论我们成长在什么样的关系型数据库管理系统中,我们都被束缚在其中,遭受着严重的供应商锁定。

菲尔因子

费率

你对这篇文章的评价是5分之一。更改评级

分享

分享

费率

你对这篇文章的评价是5分之一。更改评级