我必须开始构建数据库项目的架构,但我真的不知道引擎之间的区别。
谁能解释一下这三种引擎各自的优缺点?我们必须从中选择一个,而我对它们的唯一了解是:
- Mysql 和 Postgres:
- 免费但不如 oracle
- Mysql 作为安全问题(这是真的吗?)
- 甲骨文:
- 世界上最好的数据库引擎
- 贵
有人可以清除它们之间的其他差异吗?这是一个低预算的中/大型(我们考虑大约 100 到 200 table )项目,您会选择什么?预算更高?
最佳答案
几年前我不得不写一个翻译引擎;你给它提供一组 sql,它翻译成当前连接引擎的方言。我的引擎适用于 Postgres(又名 PostgreSql)、Ingres、DB2、Informix、Sybase 和 Oracle - 哦,还有 ANTS。坦率地说,Oracle 是我最不喜欢的(更多内容见下文)...不幸的是,mySql 和 SQL Server 不在列表中(当时两者都未被视为重要的 RDBMS - 但时代在改变)。
不考虑引擎的质量或性能——以及制作和恢复备份的难易程度——以下是主要的区别:
- 数据类型
- 限制
- 残疾人
- 保留字
- 空语义(见下文)
- 引用语义(单引号 '、双引号 "或两者之一)
- 语句完成语义
- 函数语义
- 日期处理(包括常量关键字,如“now”和输入/输出函数格式)
- 是否允许行内评论
- 最大属性长度
- 最大属性数
- 连接语义/安全范例。
为了让您对所有转换数据感到厌烦,这里有一个数据类型 lvarchar 的示例:
oracle=varchar(%x) sybase=text db2="long varchar"informix=lvarchar postgres=varchar(%x) ants=varchar(%x) ingres=varchar(%x,%y)
在我看来,最重要的是空值处理; Oracle SILENTLY 将空白输入字符串转换为空值。 ...很久以前的某个地方,我读了一篇关于“空值的十七种含义”或类似内容的文章,真正的重点是空值非常有值(value),空字符串和空字符串之间的区别是有用且不平凡!我认为 Oracle 在这一点上犯了一个巨大的错误;其他人都没有这种行为(我见过)。
我第二不喜欢的是 ANTS,因为与其他所有公司不同,他们强制执行愚蠢的完美语法规则,绝对没有其他人这样做,虽然他们可能是唯一一家提供完美遵守标准的数据库公司,但他们也是为之编写代码实在是太痛苦了。
我最喜欢的是 Postgres;它在 _real_world_ 情况下非常快,有很好的支持,并且是开源/免费的。
关于mysql - postgreSQL mysql oracle 差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/216601/