我们都有自己喜欢的数据库。如果你客观地看待你选择的数据库,它有什么缺点,有什么可以改进?
规则:
更详细的说明,如何做得更好的解释或不具有相同限制的其他技术的示例。
请勿删除任何未广泛使用的数据库。在其他技术上很容易拍摄,但我们希望从你的经验中学习,而不是偏见。
答案 0 :(得分:5)
Oracle数据库非常昂贵
Oracle做得很好,但许可成本非常可怕。 Oracle XE的发布改进了这一点,但其局限性意味着它对您的解决方案构成增长限制。
答案 1 :(得分:2)
数据库 Microsoft SQL Server 2005
缺陷缺少“插入或更新”
<强>描述强>
通常,您需要在表中插入或更新记录,具体取决于记录是否存在。没有原子操作会导致不必要的交易。
MySQL或SQLServer 2008不会发生这种情况。
答案 2 :(得分:2)
数据库 PostgreSQL
缺陷没有SQL事件探查器
我们在最近的一次会议上向开发人员询问了这一点,我知道现在他们正在寻求实施。
答案 3 :(得分:2)
与其他数据库自动增量相比,我喜欢Oracle中序列的灵活性,但是无法将seq.nextval设置为pk列的默认设置有点烦人,而且必须解决这个问题。
答案 4 :(得分:1)
数据库 Microsoft SQL Server
缺陷巨额许可费用
<强>描述强>
SQL Server具有强大的功能,并且与.NET开发集成得非常好。问题是,当您必须从共享数据库扩展到专用数据库时,许可成本非常高。实际上,这导致应该在专用服务器上运行的数据库,托管在具有性能和安全问题的共享服务器上。
MySQL或PostgreSQL不会发生这种情况。
答案 5 :(得分:1)
数据库 Microsoft SQL Server 2005
缺陷错误实施的用户界面
<强>描述强>
SQL Server管理工作室无法提供出色的用户体验:
版本2000不会发生这种情况。
答案 6 :(得分:1)
数据库 MySQL
缺陷仅在某些表类型上支持外键
<强>描述强>
够了。它具有明显的维护意义。
外键定义符合以下条件:
- 两个表都必须是InnoDB表,它们不能是TEMPORARY表。
here:
对于InnoDB以外的存储引擎,MySQL Server在CREATE TABLE语句中解析FOREIGN KEY语法,但不使用或存储它。
任何其他主要数据库都不会发生这种情况。
答案 7 :(得分:1)
数据库:Oracle
问题:表,过程,列等的名称不能超过30个字符。这令人气愤。
问题:这是slapdash JDBC合规性。例如,存储过程不以符合JDBC的方式返回结果集,而是返回专有的OUT参数类型。这意味着您无法使用更高级别的JDBC抽象。
答案 8 :(得分:1)
数据库 MySQL
缺陷服务器将启动损坏的表
的描述强>
如果MySQL有一个损坏的表 - 从写入期间被杀或其他一些失败 - 它将很乐意启动并允许用户继续进行,就像问题不存在一样。当然,它会在日志中产生一些错误消息,但根据我的经验,当你试图找出应用程序奇怪的行为时,这没有任何帮助。
大多数其他数据库会在启动时检测并修复错误,或者只是拒绝从任何类型的损坏开始。
答案 9 :(得分:1)
数据库 MySQL 5.0.x及更高版本
缺陷环复制错误导致不同节点上的数据不一致
<强>描述强>
我们目前面临的最严重的问题是,在MySQL环中,环本身会产生错误并停止复制。
从5.x.x开始,可以构建一个环(或Master-Master-replication):您将数据库链接在一个“ring”中,以便相互复制数据。每个数据库节点都会从所有其他节点获取所有更改。
我们假设错误在于自动增量失败。这在普通复制中也是已知的,但在新版本中,错误日志中没有sufficinet错误消息。我强烈建议不要在MySQL中使用此功能,只要这里的问题没有解决。
答案 10 :(得分:1)
数据库 Oracle
问题临时表定义不是私有
描述许多数据库(例如Postgres和Sybase)允许您动态创建临时表,插入其中,根据需要添加索引,然后从中查询。 Oracle具有临时表,但临时表定义存在于全局名称空间中。因此临时表必须由DBA创建,您需要在它们使用的表定义和代码之间进行同步,如果两段代码需要相似(但不相同)的表定义,则需要使用不同的名称。这些差异使得临时表对开发人员来说不那么方便。
是的,我理解查询优化器具有全局定义的好处。然而对我来说,缺乏便利性使得Oracle的临时表对我来说几乎无用,而我在Postgres中非常密集地使用它们。
答案 11 :(得分:1)
数据库 Oracle
缺陷长时间没有很好地处理长数据类型
<强>描述强>
Oracle只有9i之前才有长数据类型(我相信),此时它被弃用而不支持LOB。然而,有大量的代码,仍然有长期和所有相关的限制。其中最大的一点是每个表只能有一个长列,而且必须位于列的末尾。有关长期限制的更详尽列表,请参阅here。
答案 12 :(得分:0)
任何SQL DBMS
缺陷:重复行
关系模型的优点之一是它表示没有重复元组的所有东西,即使用具有键且没有重复的关系。不幸的是,SQL不是那种方式构建的。这使得数据库开发人员的生活变得非常困难。 SQL开发人员必须处理没有键的表和返回重复行的调试查询。
答案 13 :(得分:0)
数据库:全部
缺点 - 那些认为在设计数据库时不知道自己在做什么很重要的人设计不佳。由于设计不良而导致所有数据库中出现的问题远多于任何缺失的功能。所以我想他们都错过了“阅读我的思想,找出最好的解决方案而不必考虑”功能。
答案 14 :(得分:0)
数据库:PostgreSQL
**问题:**例如,C#的连接器不是真正的最新版本,而是使用高级功能崩溃。
答案 15 :(得分:0)
数据库 Postgres
缺陷无分析查询
<强>描述强>
Oracle引入的分析查询是SQL 2003标准的一部分。不幸的是Postgres还没有实现它们。
答案 16 :(得分:0)
数据库 Microsoft SQL Server 2005
缺陷缺少数组类型参数
<强>描述强>
在搜索中很有用,很多时候你需要传递一系列要匹配的值。在SQL 2005中,您可以通过在SQLServer中使用CLR来执行解决方法。鉴于其有用性,将此功能开箱即用更有意义。
SQL Server 2008或Oracle不会发生这种情况。
答案 17 :(得分:0)
数据库 Oracle
缺陷包裹上的授权粒度
<强>描述强>
您只能授予对包的权限,而不能授予包内存储过程的权限。或者,您可以为单个存储过程授予权限,但之后将它们放在包之外。这需要您事先了解谁将使用哪个存储过程并且很难重构。
SQL Server不会发生这种情况。
答案 18 :(得分:0)
数据库:Sql Compact Edition
缺点:不支持存储过程。
无论此限制如何,此数据库都将其“特别用作可用于智能客户端或分发到移动平台的应用程序的客户端缓存”。
答案 19 :(得分:0)
PostgreSQL没有一个好的故障转移解决方案,但我知道他们正在研究它。