47

如果我正在设计一家炼油厂,我不会期望来自不同供应商的材料不会以微妙而重要的方式不符合已发布的标准。来自一家供应商的管道、阀门和其他组件将配备符合 ANSI 标准的法兰和壁厚,任何其他供应商的相同零件也是如此。因此,互操作性和系统安全性得到了保证。

那么,为什么通用数据库对它们所遵循的标准的哪些部分如此挑剔,为什么没有 100% 符合标准的系统脱颖而出呢?标准是否“被破坏”、缺乏范围或太难设计?

得出结论;ANSI(或 ISO)定义 SQL 标准的意义何在?

编辑:常见数据库之间的实现差异列表

4

12 回答 12

18

在软件行业,有些标准是真正的标准,即不符合这些标准的产品就无法工作。文件规范属于该类别。但是您也有更像指南的“标准”:它们可能定义为具有逐点定义的标准,但通常仅部分实施或具有显着差异。Web 开发充满了这样的“标准”,例如 HTML、CSS 和“ECMAScript”,不同的供应商(即 Web 浏览器)以不同的方式实现这些标准。

这种变化会让人头疼,但标准化仍然会带来好处。想象一下,如果根本没有 HTML 标准并且每个浏览器都使用自己的标记语言。同样,想象一下如果没有 SQL 标准并且每个数据库供应商都使用自己完全专有的查询语言。将会有更多的供应商锁定,开发人员将很难使用多个产品。

所以,不,ANSI SQL 与 ANSI 标准在其他行业中的用途不同。但它确实有一个有用的目的。

于 2009-04-24T18:45:57.873 回答
14

可能是因为标准一致性对数据库系统购买者的优先级较低。他们更感兴趣的是:

  • 与他们已经拥有的东西的兼容性
  • 表现
  • 价格
  • 操作系统支持

仅举几个因素。

编程语言也是如此——很少有(如果有的话)编译器支持当前 ANSI C 和 C++ 标准的每一个特性。

至于为什么要使用标准,大多数供应商最终都会提供标准支持。例如,大多数供应商或多或少都支持 SQL89。这允许供应商在他们的规格表上勾选一个(相对不重要的)复选框,也允许像我这样对编写可移植代码感兴趣的人这样做,尽管不得不放弃很多花里胡哨的东西。

于 2009-04-24T08:07:57.317 回答
13

请参阅文章“ SQL 是否成为真正的标准?” 有关 SQL 标准当前(2005 年)问题的讨论。

于 2010-08-02T11:10:45.347 回答
6

事实上,ANSI SQL 标准并不经常被遵循。只需阅读 SO:大多数 SQL 线程从不参考标准,例如,关于网络协议的讨论通常包括相关 RFC 的实际引用、章节和经文。

我一直怀疑其中一个原因是 SQL 标准不能自由分发。简单地得到它并非易事。各种非官方副本四处流传。)

另一个原因是它是一个非常复杂的文本并且组织不好。它使用了一个奇怪的词汇(例如“authID”而不是“user”)。您需要书籍来理解标准(“SQL 标准指南”,CJ Date,Hugh Darwen - Addison-Wesley)。

于 2009-04-27T07:59:05.940 回答
5

我不具体了解 ANSI SQL 的历史。但似乎很多时候在软件开发中,标准是在主要参与者已经实现了他们自己的专有版本之后编写的。一旦一家公司投资于自己的做事方式,就很难证明改变或删除人们为了遵守标准而依赖的功能是合理的。Web 标准是这种现象的主要例子。

于 2009-04-24T08:08:30.153 回答
5

Mimer SQL有很好的标准支持,但它却鲜为人知。它在几个大型地点生产,主要在瑞典。但我认为很多网站正在迁移到其他网站。

详细的支持声明:

  • SQL-99
  • SQL-2003
  • PSM
  • 根据 SQL:1999 的数据库触发器和函数
  • 根据 SQL:1999 支持二进制和字符大对象 (BLOB/CLOB/NCLOB)
  • 符合 Open Group 的 XA 标准的多数据库事务(两阶段提交)
  • 支持 Java ME CDC Foundation Profile 和 Java ME CLDC/MIDP
于 2010-08-02T08:13:18.500 回答
3

几年前,就管道和连接器相互兼容而言,最糟糕的行业之一是消防设备。从字面上看,有几十个相互不兼容的软管与泵连接。当互助在消防员中变得司空见惯时,他们必须携带数十个适配器才能与他们的设备互操作。

9 月 11 日,警察和消防员都拥有专用无线网络,用于人员之间的相互通信。但猜猜怎么了?这两个系统并不相互兼容。因此,从一种公共安全服务人员到另一种公共安全服务人员的信息交流存在不必要的延误。

如果你回溯到足够远的地方,你会发现纽约市的某个时候,大约一半的电网是直流电,受到爱迪生的青睐,另一半是交流电,受到西屋公司的青睐。

标准有时会自行产生,被称为事实上的标准。更常见的是,标准必须由专门授权的机构制定。对于 SQL 标准,一些最大的供应商早于该标准。为了符合标准,他们将不得不投入不利于现有客户群的工程费用。更糟糕的是,它们最终可能会与自己之前的产品不兼容。

完全符合 SQL 标准可能还会发生,但不太可能。即使是这样,在新 SQL 标准的发展和遵守它之间也有一段延迟时间。

于 2009-04-24T11:32:18.197 回答
2

恕我直言,数据库供应商推动 ANSI SQL 标准在他们的领域内包含新功能和结构,而不是 ANSI 告诉数据库供应商“一种真正的方式”。

数据库市场由功能、可扩展性和成本驱动。通过等待 ANSI 批准语法来放弃和延迟技术优势(即分区、透视、UPSERT、复制)并不是商业优先事项。到完成的时候,已经有大量专有语法的安装。

话虽如此,大多数数据库供应商在过去几年中都大大改进了他们的核心“ANSI SQL”支持。(带有 SELECT FROM INFORMATION_SCHEMA 的 SQL Server 和 Oracle 的 ANSI 联接实际上与 CBO 下的本机联接一样有效)

于 2009-04-24T08:30:46.200 回答
2

根据 HSQLDB 手册,它是最符合标准的 RDBMS

  • 几乎支持 SQL-92 到高级级别的所有语法特性
  • SQL:2008 核心和该标准的许多可选特性
于 2012-03-25T01:08:18.680 回答
1

真正的原因:大多数“开发人员”都是以客户为中心的编码人员,因此既不理解也不关心 Codd 博士的 12 条规则。这也是为什么在 webKiddie 开发中经常可以看到在任何意义上都不是关系数据库的 MySql。这样的开发人员只需要基本的 SELECT、UPDATE、DELETE 解析。他们避开任何形式的约束,更喜欢“在应用程序中执行”。Reactionary 1960 的应用程序就是你所得到的。

于 2009-04-26T20:18:55.933 回答
0

他们中的大多数都非常合规。但这里有个坏消息,IMO - 标准滋生平庸。供应商希望您被锁定在他们的扩展中,并且通常有充分的理由对非标准事物进行处理。实际上,您将 Oracle 转储到 SQL Server 的可能性有多大,反之亦然?除非您构建您的客户可以针对其他数据库使用的产品,否则您作为企业不太可能更换数据库。太痛苦了。

于 2009-04-24T11:56:52.290 回答
0

公司通常倾向于使用一个供应商来避免支持一堆不同且可能不兼容的系统。培训您的开发人员/系统工程师使用一个数据库供应商的工具也比使用 3 套不同的工具便宜得多。稍后,这家公司可能会变得足够大,可以收购一些竞争对手。这将意味着您必须管理、集成等另一套完全不同的工具。

这是很多工作。

想象一下,你有一个可移植层,而不是那个,所以你真的不在乎下面是什么。那会好很多。

于 2010-08-28T17:20:38.393 回答