Back to article
Apples and Oranges, Part III: A Linux DBMS Comparison
Evaluating a Wide Range of Factors
November 29, 1999
We're going to change direction in midstream. In this part, I'll cover non-performance-related topics. In the next and final part, I'll cover with benchmarking and then close with the final conclusion.
If one needs a real RDBMS, the only viable choice of the three here is PostgreSQL. If raw performance counts, one of the smaller systems may well be better, especially if the accesses made to the database are uncomplicated and mostly automatic. mSQL and MySQL are advertised as Web database systems for a reason.
MySQL is free and modification of the source code under certain conditions is allowed, but redistribution for commercial purposes is forbidden.
mSQL is free for use by noncommercial organizations; otherwise purchase of a licence after a 14-day evaluation period is necessary.
Because of these differences, people in the enterprise using one of them need to consider licensing conditions carefully.
Implementation of the ANSI Standard
PostgreSQL does not yet fully support referential integrity, but it is the only DBMS tested that does transactions. Other new SQL features like the SQLSTATE variable aren't implemented either.
MySQL does neither transactions nor does it preserve referential integrity; tables can be explicitly locked and unlocked for transactional access.
mSQL lacks most of the features of ANSI SQL. It implements only a minimalistic API, with no transactions and no referential integrity.
Neither mSQL nor MySQL feature Embedded SQL (ESQL) preprocessors. I now like ESQL quite a bit, as it turns out, but it's not really hard to use the native C APIs that mSQL and MySQL provide. There is the same cursor metaphor, just implemented in a different way, and passing strings to C functions is only slightly harder than using embedding SQL statements in the code.
In addition to the ESQL API mentioned, PostgreSQL comes with a native C API, C++ bindings, JDBC, ODBC, Perl bindings, Python bindings, and Tcl bindings.
MySQL comes with additional ODBC support for Win32 platforms; language bindings are available for at least C++, Eiffel, Java, Perl, Python, PHP and Tcl.
mSQL is tightly integrated with Lite, a C-like scripting language shipping with the distribution. A Web integration package called W3-mSQL is available, as are JDBC, ODBC, Perl and PHP APIs.
Note that I haven't tested any of those additional bindings and features; their quality and the state of their documentation are not necessarily good. Many third-party extensions to all three systems can be obtained; this overview is not exhaustive.