views:

653

answers:

18

We all have our favourite database. If you look objectively at your chosen database, what drawbacks does it have and what could be improved?

The rules:

  • One reply per drawback with;
  • a short description of the limitation, followed by;
  • a more detailed description, an explanation of how it could be done better or an example of another technology that does not have the same limitation.

  • Do not diss any database that you haven't used extensively. It is easy to take potshots at other technologies but we want to learn form your experience, not your prejudice.

+5  A: 

Oracle databases are quite expensive

Oracle does what it does well but the licensing costs are horrendous. That has been improved by the release of Oracle XE but the limitations of that mean that it is a growth constraint on you solution.

pappes
A: 

PostgreSQL doesn't have a good failover solution, but I understand they're working on it.

Greg Hewgill
SLONY fills this hole reasonably well.
+1  A: 

Database Microsoft SQL Server

Defect Huge licensing cost

Description

SQL Server has great features and it integrates very well with .NET development. The issue is that when you have to scale up from a shared database to a dedicated database, licensing costs are really high. This, in effect, leads to databases which should really run on a dedicated server, being hosted on shared servers with performance and security issues.

This does not happen with MySQL or PostgreSQL.

Sklivvz
A: 

Database : Sql Compact Edition

Drawback : Stored procedures are not supported.

Regardless of this limitation, this DB has its' uses especially as a client cache for application that can be smart client or distributed to mobile platforms.

ArielBH
+1  A: 

Database Microsoft SQL Server 2005

Defect Badly implemented UI

Description

SQL Server management studio does not offer a great user experience:

  • Tabbing behaviour is weird: you are always looking for the right tab
  • Keeps on crashing on 64-bit versions
  • Missing some features of preceding version, like overview of grants of stored procedures

This does not happen with version 2000.

Sklivvz
I've never used SQL Server 2005 at all, but surely they can't have made a worse UI than Enterprise Manager for SQL server 2000? That would be impressive.
Mark Baker
:) unfortunately it's sad but true... 64bit versions crash every 2 minutes... 32 bit versions are... awkard... and they didn't add the most important thing: intellisense. :(
Sklivvz
I wouldn't actually consider the UI as part of the DBMS. But then, I'm used to using DB2 for z/OS where the UI is usually ISPF (80x24 green screen, text based menus, etc).
paxdiablo
+1  A: 

Database MySQL

Defect Foreign Keys supported only on some table types

Description

Enough said. It has obvious maintenance implications.

From the MySQL manual

Foreign keys definitions are subject to the following conditions:

  • Both tables must be InnoDB tables and they must not be TEMPORARY tables.

And here:

For storage engines other than InnoDB, MySQL Server parses the FOREIGN KEY syntax in CREATE TABLE statements, but does not use or store it.

This does not happen with any other major DB.

Sklivvz
Why would you not use InnoDB for everything? It's the right choice 95% of the time. Where it isn't good is where you need the maximum insert speed, and in that case you probably don't want to be slowed down by foreign key checks.
Mark Baker
A very simple reason: legacy tables on which you have no control
Sklivvz
A: 

Database Oracle

Defect Granularity of grants on packages

Description

You can only grant permissions on packages and not on stored procedures inside packages. Or alternatively, you can grant permissions on single stored procedures but then you put them outside of packages. This requires you to know up front who will use which stored procedure and it is really hard to refactor.

This does not happen with SQL Server.

Sklivvz
I dont agree. Oracle's packages are a vastly better implementation than the huge list of sp's in SQL Server. IIRC, you can also define a package to use "executor" rights rather that "definer" rights to limit this "problem".
Guy
I have nothing against packages. Please reread my answer. Thanks,
Sklivvz
+2  A: 

Database Microsoft SQL Server 2005

Defect Lack of "INSERT OR UPDATE"

Description

Often you need to either insert or update a record in a table, depending on whether the record is present or not. Not having an atomic operation to do so leads to unnecessary transactions.

This does not happen with MySQL or SQLServer 2008.

Sklivvz
+1  A: 

Database MySQL
Defect Server will start up with damaged tables
Description

If MySQL has a damaged table - from either being killed during a write or some other failure - it will quite happily start up and allow the user to carry on as if the problem does not exist. Granted it will produce some error messages in the log, but from my experience this doesn't help when you're trying to figure out why an application is behaving oddly.

Most other databases will detect and repair the error on startup or simply refuse to start with any sort of corruption.

BigMikeD
A: 

Database Microsoft SQL Server 2005

Defect Lack of array type parameters

Description

Useful in searches, a lot of times you need to pass a series of values to be matched against. In SQL 2005 you can do a workaround by using CLR inside SQLServer. Given the usefulness it would make more sense to have this feature out of the box.

This does not happen with SQL Server 2008 or Oracle.

Sklivvz
+1  A: 

Database MySQL 5.0.x and above

Defect Ring replication errors lead to inconsistent data on different nodes

Description

The most serious problem in production we face at the moment is that in a MySQL ring the ring itself produces an error and stops replicating.

Building a ring (or Master-Master-replication) is possible since 5.x.x: You chain the databases in a "ring" so that the replicate data to each other. Every database-node gets all the changes from all other nodes.

We assume that the error lies behind autoincrement- failures. This is known from normal replication, too, but in the new version there are no sufficinet error messages in the error log. I highly recommend not to use this feature in MySQL as long as the problems here are not fixed.

Georgi
+2  A: 

Database PostgreSQL

Defect No SQL Profiler

We asked the developers about this at a recent conference and I understand it's now something they're looking to implement.

Sam Wessel
A: 

Database Postgres

Defect No analytic queries

Description

Analytic queries, introduced by Oracle, are part of the SQL 2003 standard. Unfortunately Postgres hasn't implemented them yet.

+1  A: 

Database Oracle

Defect Did not handle long datatype well for too long

Description

Oracle only had the long datatype until 9i (I believe) at which point it was deprecated in favor of the LOBs. There is a ton of code out there, however, which still has longs and all of the related restrictions. The biggest of which was that each table could only have one long column and it had to be at the end of the columns. See here for a more exhaustive list of restricitons on the long.

JK
+2  A: 

I love the flexibility of sequences in Oracle as compared with other databases autoincrements, but the inability to set seq.nextval as a default for a pk column is somewhat annoying, and must be trivial to fix.

Niall Litchfield
+1  A: 

Database Oracle

Problem Temp table definitions are not private

Description Many databases (eg Postgres and Sybase) allow you to create temp tables on the fly, insert into them, add indexes if you want, then query from them. Oracle has temp tables, but the temp table definitions exist in a global name space. Therefore the temp table has to be created by a DBA, you need to synchronize between the table definition they used and your code, and if two pieces of code want similar (but not identical) table definitions, they need to use different names. These differences make temp tables far less convenient for developers.

Yes, I understand the benefits for the query optimizer of having global definitions. However for me the lack of convenience makes Oracle's temp tables virtually useless for me, while I use them very intensively in Postgres.

Don't forget subquery factoring clauses though -- I'm on a campaing to eliminate the use of temporary tabes and stored procedures for reporting in my current job, asSQFCs will often do the job with much less hassle.
David Aldridge
Why is this marked down? It's a good answer to the original question. If it isn't true then that would be a good reason to mark it down but I'd expect a comment explaining why.
Mark Baker
Is this more about the relationship you have with your DBA than Oracle? Your code could create tables by executing some immediate DDL if given the rights. (I think you need to call EXECUTE_DDL)
WW
A: 

Database : PostgreSQL

**Problem : ** is that connector for C# for example are not really up-to-date and crash with advanced feature.

Daok
+1  A: 

Database: Oracle

Problem: The names of tables, procedures, columns, etc cannot exceed 30 characters. This is infuriating.

Problem: It's slapdash JDBC compliance. For example, stored procedures do not return results sets in a JDBC-compliant way, but instead of a proprietary OUT parameter type. This means you can't use higher-level JDBC abstractions.

skaffman
I can understand 30 character procedure names being a problem in some cases, but if your table or column names are that long your SQL's going to be pretty hard to read I'd have thought.
Mark Baker