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

时间:2009-04-24 08:03:59

标签: sql database database-design standards ansi-sql

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

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

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

修改:List of implementation differences between common databases

12 个答案:

答案 0 :(得分:16)

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

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

所以,不,ANSI SQL与其他行业的ANSI标准不同。但它仍然有用。

答案 1 :(得分:13)

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

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

仅列举一些因素。

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

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

答案 2 :(得分:12)

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

答案 3 :(得分:6)

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

我一直怀疑其中一个原因是SQL标准不能自由分发。简单地得到它并非易事。各种unofficial copies浮动。)

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

答案 4 :(得分: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

答案 5 :(得分:4)

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

答案 6 :(得分:3)

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

9月11日,警察和消防队员都拥有私人无线网络,可以在他们的人民之间进行相互通信。但猜猜怎么了?这两个系统不相互兼容。因此,从一种公共安全仆人到另一种公共安全仆人的信息传播方面存在不必要的延迟。

如果你回到足够远的地方,你可以在纽约市找到一个时间,大约一半的电网是DC,受到爱迪生的青睐,另一半是AC,受到西屋公司的青睐。

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

可能会完全符合SQL标准,但不太可能。即使它确实如此,新SQL标准的发展与遵守它之间也存在延迟时间。

答案 7 :(得分:2)

恕我直言,数据库供应商推进ANSI SQL标准,以包括新功能和在他们的领域内构建的内容远远超过ANSI告诉DB供应商“一种真正的方式”。

数据库市场受功能,可扩展性和成本的驱动。通过等待ANSI批准语法来放弃和延迟技术优势(即分区,枢轴,UPSERT,复制)不是商业优先级。到目前为止,已经有了重要的专有语法安装。

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

答案 8 :(得分:2)

根据HSQLDB手册,it is the most standards compliant RDBMS

  • 几乎支持SQL-92的所有语法功能,直到高级别
  • SQL:2008核心和本标准的许多可选功能

答案 9 :(得分:1)

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

答案 10 :(得分:0)

他们中的大多数都非常合规。但这是坏消息,IMO标准品种平庸。供应商希望您锁定他们的扩展,并且通常有很好的理由去做非标准的事情。实际上,你有多大可能转储Oracle for SQL Server,反之亦然?除非你构建一个你的cusotmer可能用于其他数据库的产品,否则你作为企业不太可能换掉DB。太痛苦了。

答案 11 :(得分:0)

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

这是很多工作。

想象一下,不是那样,你有一个可移植性层,所以你真的不关心下面是什么。那会更好。