7

我必须开始为数据库项目构建架构,但我真的不知道引擎之间的区别。

谁能解释一下这三种引擎各自的优缺点?我们必须选择其中一个,而我真正了解的唯一一件事是:

  • Mysql & Postgres:
    • 是免费的,但不如 oracle
    • Mysql 作为安全问题(这是真的吗?)
  • 甲骨文:
    • 世界上最好的数据库引擎
    • 昂贵的

有人可以清除它们之间的其他差异吗?这是一个预算较低的中/大型(我们正在考虑大约 100 到 200 张桌子)项目,您会选择什么?并且预算更高?

4

4 回答 4

12

几年前我不得不写一个翻译引擎;你给它输入一组 sql,它会翻译成当前连接的引擎的方言。我的引擎适用于 Postgres (AKA 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)

在我看来,最重要的是 null 处理。Oracle 静默地将空白输入字符串转换为空值。...很久以前的某个地方,我读到有人写的关于“空的十七个含义”或类似的文章,真正的一点是空值非常有价值,空字符串和空字符串之间的区别是有用且不平凡!我认为甲骨文在这一点上犯了一个巨大的错误。其他人都没有这种行为(我见过)。

我最不喜欢的第二个是 ANTS,因为与所有其他人不同,他们执行了绝对没有其他人做的完美语法的愚蠢规则,虽然他们可能是唯一一家提供完美遵守标准的 DB 公司,但他们也是皇家的痛苦写代码的屁股。

我最喜欢的是 Postgres。它在 _real_world_ 情况下非常快,有很好的支持,并且是开源/免费的。

于 2008-10-20T00:46:11.270 回答
4

不同 SQL 实现之间的差异很大,至少在底层是这样。这块板不足以将它们全部计算在内。

如果你不得不问,你也必须问自己是否能够就此事做出有效和有根据的决定。

可以在这里找到 MYSQL 和 Postgres 的比较

请注意,Oracle 还提供了Express (XE) 版本,其功能有所减少,但可以免费使用。另外,如果你一开始的知识很少,你就得自己去学习,我随便选一个,用它开始学习。

于 2008-10-19T16:28:23.523 回答
3

请参阅维基百科上的比较表:http ://en.wikipedia.org/wiki/Comparison_of_object-relational_database_management_systems && http://en.wikipedia.org/wiki/Comparison_of_relational_database_management_systems

Oracle 可能是也可能不是最好的。它很贵,但这并不意味着最好。

您看过 DB2 吗?赛贝斯?太数据?微软 SQL?

于 2008-10-19T16:25:22.530 回答
2

我认为对于低预算情况,Oracle 是不可能的。100-200 个表并不大,通常模式中的表数量不是一个规模衡量标准。数据集和吞吐量是。

你可以看看http://www.mysqlperformanceblog.com/(以及他们的极品书籍)了解 MySQL 如何处理大型部署。

通常,现在大多数 RDBMS 几乎可以完成您在非常严肃的应用程序中需要的任何事情。

于 2009-03-03T21:08:39.370 回答