为什么没有数据库完全支持ANSI或ISO SQL标准?

Lun*_*tik 46 sql database standards database-design ansi-sql

如果我正在设计炼油厂,我不希望来自不同供应商的材料不会以微妙但重要的方式符合公布的标准.来自一个供应商的管道,阀门和其他部件将带有符合ANSI标准的法兰和壁厚,以及来自任何其他供应商的相同部件.因此确保了互操作性和系统安全性.

那么为什么普通数据库如此挑剔他们所遵循的标准的哪些部分,以及为什么没有100%符合标准的系统脱颖而出?标准是否"破损",缺乏范围或难以设计?

结论是这样的; ANSI(或ISO)定义SQL标准的重点是什么?

编辑:公共数据库之间的实现差异列表

Joh*_*ant 18

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

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

所以,不,ANSI SQL与其他行业的ANSI标准没有相同的用途.但它确实起到了一个有用的作用.

  • @StefanSteiger,我认为您对SQL的观点与OP差不多,而您对HTML的观点与我所说的差不多(`可以定义为标准...仅实现部分或有显着差异”)。您只是得出不同的结论。你说没有意义。我说我宁愿至少半一致地定义HTML和SQL,而不是根本不定义。 (2认同)

小智 14

可能是因为标准一致性对数据库系统购买者来说是低优先级的.他们对以下内容更感兴趣:

  • 与他们已经拥有的相容
  • 性能
  • 价钱
  • OS支持

仅举几个因素.

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

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

  • 我不认为它与C/C++的情况完全相同.你是对的,很少有编译器实际上支持整个C++语言,但它至少被认为是正确的方向,如果他们的编译器不支持他们需要的语言功能,客户通常会大惊小怪.在数据库中,用户只是在更大程度上接受不合格.这就是世界的运作方式,似乎没有人真正想到. (6认同)

olu*_*ies 13

请参阅文章" IS SQL A REAL STANDARD ANYMORE?" 有关SQL标准当前(2005)问题的讨论.

  • 我认为**这个**是正确的答案.在第2页和第3页:NIST用于测试一致性,美国政府只能购买符合要求的实施.当NIST在1996年开始拆除其数据管理标准程序时,数据库供应商不再费心去实施该标准了. (3认同)

bor*_*yer 6

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

我一直怀疑其中一个原因是SQL标准不能自由分发.简单地得到它并非易事.各种非正式的副本浮动.)

另一个原因是它是一个非常复杂的文本和组织不良.它使用奇怪的词汇表(例如"authID"而不是"user").你需要书籍才能理解标准("SQL标准指南",CJ Date,Hugh Darwen - Addison-Wesley).


Rya*_*ger 5

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


olu*_*ies 5

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

详细支持声明:

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