|
|
Comparison of relational database management systemsThe following tables compare general and technical information for a number of relational database management systems. Please see the individual products' articles for further information. This article is not all-inclusive or necessarily up-to-date. ==General information== Basic general information about the RDBMSes: creator, company, license, etc. {| border="1" cellpadding="1" cellspacing="0" style="font-size: 85%; border: gray solid 1px; border-collapse: collapse; text-align: center; width: 100%;" |- style="background: #ececec" ! ! Creator ! First public release date ! Latest stable version ! Software license |- ! style="text-align:left;" bgcolor="#ececec" | Adaptive Server Enterprise | Sybase | 1987 | 12.5.3 | Proprietary |- ! style="text-align:left;" bgcolor="#ececec" | DB2 | IBM | 1982 | 8.2 | Proprietary |- ! style="text-align:left;" bgcolor="#ececec" | Firebird (database server) | Firebird Foundation | July 25, 2000 | 1.5.2 | InterBase Public License |- ! style="text-align:left;" bgcolor="#ececec" | Informix | Informix Software | 1985 | 10.0 | Proprietary |- ! style="text-align:left;" bgcolor="#ececec" | Ingres | Berkeley University, Computer Associates | 1980 | r3 3.0.1 | CA-TOSL |- ! style="text-align:left;" bgcolor="#ececec" | InterBase | Borland | 1985 | 7.5 | Proprietary |- ! style="text-align:left;" bgcolor="#ececec" | MaxDB | MySQL AB, SAP Aktiengesellschaft | ? | 7.5 | GPL or proprietary |- ! style="text-align:left;" bgcolor="#ececec" | Microsoft SQL Server | Microsoft | 1989 | 8.00.2039 (2000 SP4) | Proprietary |- ! style="text-align:left;" bgcolor="#ececec" | MySQL | MySQL AB | 1997 | 4.1 | GPL or proprietary |- ! style="text-align:left;" bgcolor="#ececec" | Oracle database | Oracle Corporation | 1977 | 10g Release 1 | Proprietary |- ! style="text-align:left;" bgcolor="#ececec" | PostgreSQL | PostgreSQL | June, 1989 | 8.0.3 | BSD license |- ! style="text-align:left;" bgcolor="#ececec" | SQLite | D. Richard Hipp | August 17 2000 | 3.1.3 | Public domain |- style="background: #ececec" ! ! Creator ! First public release date ! Latest stable version ! Software license |- |} ==Operating system support== The operating systems the RDBMSes can run on without emulation. {| border="1" cellpadding="1" cellspacing="0" style="font-size: 85%; border: gray solid 1px; border-collapse: collapse; text-align: center; width: 100%;" |- style="background: #ececec" ! ! style="width:16%;" | Microsoft Windows ! style="width:16%;" | Mac OS X ! style="width:16%;" | Linux ! style="width:16%;" | BSD ! style="width:16%;" | Unix |- ! style="text-align:left;" bgcolor="#ececec" | Adaptive Server Enterprise | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | DB2 | bgcolor="#ddffdd" | Yes | bgcolor="#ffdddd" | No | bgcolor="#ddffdd" | Yes | bgcolor="#ffdddd" | No | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | Firebird (database server) | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | Informix | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | Ingres | bgcolor="#ddffdd" | Yes | bgcolor="#fcfcfc" | ? | bgcolor="#ddffdd" | Yes | bgcolor="#fcfcfc" | ? | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | InterBase | bgcolor="#ddffdd" | Yes | bgcolor="#ffdddd" | No | bgcolor="#ddffdd" | Yes | bgcolor="#ffdddd" | No | bgcolor="#ddffdd" | Yes (Solaris Operating Environment) |- ! style="text-align:left;" bgcolor="#ececec" | MaxDB | bgcolor="#ddffdd" | Yes | bgcolor="#ffdddd" | No | bgcolor="#ddffdd" | Yes | bgcolor="#ffdddd" | No | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | Microsoft SQL Server | bgcolor="#ddffdd" | Yes | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No |- ! style="text-align:left;" bgcolor="#ececec" | MySQL | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | Oracle database | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ffdddd" | No | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | PostgreSQL | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | SQLite | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes |- style="background: #ececec" ! ! Microsoft Windows ! Mac OS X ! Linux ! BSD ! Unix |- |} ==Fundamental features== Information about what fundamental RDBMS features are implemented natively. {| border="1" cellpadding="1" cellspacing="0" style="font-size: 85%; border: gray solid 1px; border-collapse: collapse; text-align: center; width: 100%;" |- style="background: #ececec" ! ! style="width:20%;" | ACID ! style="width:20%;" | Referential integrity ! style="width:20%;" | Database transaction ! style="width:20%;" | Unicode |- ! style="text-align:left;" bgcolor="#ececec" | Adaptive Server Enterprise | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | DB2 | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | Firebird (database server) | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | Informix | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | Ingres | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | InterBase | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | MaxDB | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | Microsoft SQL Server | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | MySQL | bgcolor="#ffffdd" | Depends #fn_1 | bgcolor="#ffffdd" | Depends #fn_1 | bgcolor="#ffffdd" | Depends #fn_1 | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | Oracle database | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | PostgreSQL | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | SQLite | bgcolor="#ddffdd" | Yes | bgcolor="#ffdddd" | No #fn_2 | bgcolor="#ffffdd" | Basic #fn_2 | bgcolor="#ddffdd" | Yes |- style="background: #ececec" ! ! ACID ! Referential integrity ! Database transaction ! Unicode |- |} #fn_1_back For transactions and referential integrity, the InnoDB table type must be used; the default table type, MyISAM, does not support these features. #fn_2_back CHECK and FOREIGN KEY constraints are parsed but are not enforced. Nested transactions are not supported. [http://www.sqlite.org/omitted.html] ==Tables and views== Information about what table (database)s and View (database)s #fn_3 (other than basic ones) are supported natively. {| border="1" cellpadding="1" cellspacing="0" style="font-size: 85%; border: gray solid 1px; border-collapse: collapse; text-align: center; width: 100%;" |- style="background: #ececec" ! ! style="width:25%;" | Temporary table ! style="width:25%;" | Materialized view |- ! style="text-align:left;" bgcolor="#ececec" | Adaptive Server Enterprise | bgcolor="#ddffdd" | Yes #fn_5 | bgcolor="#ffdddd" | No |- ! style="text-align:left;" bgcolor="#ececec" | DB2 | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | Firebird (database server) | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No |- ! style="text-align:left;" bgcolor="#ececec" | Informix | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | Ingres | bgcolor="#ddffdd" | Yes | bgcolor="#ffdddd" | No |- ! style="text-align:left;" bgcolor="#ececec" | InterBase | bgcolor="#ddffdd" | Yes | bgcolor="#ffdddd" | No |- ! style="text-align:left;" bgcolor="#ececec" | MaxDB | bgcolor="#ddffdd" | Yes | bgcolor="#ffdddd" | No |- ! style="text-align:left;" bgcolor="#ececec" | Microsoft SQL Server | bgcolor="#ddffdd" | Yes | bgcolor="#ffffdd" | Similar #fn_6 |- ! style="text-align:left;" bgcolor="#ececec" | MySQL | bgcolor="#ddffdd" | Yes | bgcolor="#ffdddd" | No |- ! style="text-align:left;" bgcolor="#ececec" | Oracle database | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | PostgreSQL | bgcolor="#ddffdd" | Yes | bgcolor="#ffdddd" | No #fn_4 |- ! style="text-align:left;" bgcolor="#ececec" | SQLite | bgcolor="#ddffdd" | Yes | bgcolor="#ffdddd" | No |- style="background: #ececec" ! ! Temporary table ! Materialized view |- |} #fn_3_back These database objects are available in MySQL 5.0 only, which is an experimental version. #fn_4_back Materialized view can be emulated with PL/PgSQL [http://jonathangardner.net/PostgreSQL/materialized_views/matviews.html]. #fn_5_back Server provides tempdb, which can be used for public and private (for the session) temp tables. [http://sybooks.sybase.com/onlinebooks/group-as/asg1250e/sag/@Generic__BookTextView/3225;] #fn_6_back MS SQL server provides indexed views. [http://www.sqlteam.com/item.asp?ItemID=1015] ==Indexes== Information about what index (database)es (other than basic B-tree/B plus tree indexes) are supported natively. {| border="1" cellpadding="1" cellspacing="0" style="font-size: 85%; border: gray solid 1px; border-collapse: collapse; text-align: center; width: 100%;" |- style="background: #ececec" ! ! style="width:13%;" | R-tree/R plus tree ! style="width:13%;" | Hash function ! style="width:13%;" | Expression (programming) ! style="width:13%;" | Partial ! style="width:13%;" | Reverse ! style="width:13%;" | Bitmap |- ! style="text-align:left;" bgcolor="#ececec" | Adaptive Server Enterprise | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ddffdd" | Yes | bgcolor="#ffdddd" | No |- ! style="text-align:left;" bgcolor="#ececec" | DB2 | bgcolor="#ffdddd" | No | bgcolor="#fcfcfc" | ? | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | Firebird (database server) | bgcolor="#fcfcfc" | ? | bgcolor="#fcfcfc" | ? | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No |- ! style="text-align:left;" bgcolor="#ececec" | Informix | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ffdddd" | Yes | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No |- |- ! style="text-align:left;" bgcolor="#ececec" | Ingres | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No |- ! style="text-align:left;" bgcolor="#ececec" | InterBase | bgcolor="#fcfcfc" | ? | bgcolor="#fcfcfc" | ? | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No |- ! style="text-align:left;" bgcolor="#ececec" | MaxDB | bgcolor="#fcfcfc" | ? | bgcolor="#fcfcfc" | ? | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No |- ! style="text-align:left;" bgcolor="#ececec" | Microsoft SQL Server | bgcolor="#fcfcfc" | ? | bgcolor="#fcfcfc" | ? | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No |- ! style="text-align:left;" bgcolor="#ececec" | MySQL | bgcolor="#ddffdd" | MyISAM tables only | bgcolor="#ddffdd" | HEAP tables only | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No |- ! style="text-align:left;" bgcolor="#ececec" | Oracle database | bgcolor="#ddffdd" | EE edition only | bgcolor="#fcfcfc" | ? | bgcolor="#ddffdd" | Yes | bgcolor="#ffdddd" | No | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | PostgreSQL | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No |- ! style="text-align:left;" bgcolor="#ececec" | SQLite | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No |- style="background: #ececec" ! ! R-tree/R plus tree ! Hash function ! Expression (programming) ! Partial ! Reverse ! Bitmap |- |} ==Other objects== Information about what other objects are supported natively. {| border="1" cellpadding="1" cellspacing="0" style="font-size: 85%; border: gray solid 1px; border-collapse: collapse; text-align: center; width: 100%;" |- style="background: #ececec" ! ! style="width:13%;" | Domain ! style="width:13%;" | Cursor ! style="width:13%;" | Database trigger ! style="width:13%;" | Function (programming) #fn_5 ! style="width:13%;" | Procedure #fn_5 ! style="width:13%;" | External routine #fn_5 |- ! style="text-align:left;" bgcolor="#ececec" | Adaptive Server Enterprise | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | DB2 | bgcolor="#ffdddd" | No | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | Firebird (database server) | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | Informix | bgcolor="#fcfcfc" | ? | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#fcfcfc" | ? |- ! style="text-align:left;" bgcolor="#ececec" | Ingres | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#fcfcfc" | ? |- ! style="text-align:left;" bgcolor="#ececec" | InterBase | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | MaxDB | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#fcfcfc" | ? |- ! style="text-align:left;" bgcolor="#ececec" | Microsoft SQL Server | bgcolor="#ffdddd" | No | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | MySQL | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No #fn_3 | bgcolor="#ffdddd" | No #fn_3 | bgcolor="#ffdddd" | No #fn_3 | bgcolor="#ffdddd" | No #fn_3 | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | Oracle database | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#fcfcfc" | ? |- ! style="text-align:left;" bgcolor="#ececec" | PostgreSQL | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ffdddd" | No | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | SQLite | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ddffdd" | Yes | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ddffdd" | Yes |- style="background: #ececec" ! ! Domain ! Cursor ! Database trigger ! Function (programming) ! Procedure ! External routine |- |} #fn_5_back Both function and procedure refer to internal routines written in SQL and/or procedural language like PL/SQL. External routine refers to the one written in the host languages, such as C, Java, Cobol, etc. "Stored procedure" is a commonly used term for these routine types. However, its definition varies between different database vendors. ==Partitioning== Information about what partition (database) methods are supported natively. {| border="1" cellpadding="1" cellspacing="0" style="font-size: 85%; border: gray solid 1px; border-collapse: collapse; text-align: center; width: 100%;" |- style="background: #ececec" ! ! style="width:20%;" | Range ! style="width:20%;" | Hash ! style="width:20%;" | Composite (Range+Hash) ! style="width:20%;" | List |- ! style="text-align:left;" bgcolor="#ececec" | Adaptive Server Enterprise | bgcolor="#ffdddd" | No | bgcolor="#ddffdd" | Yes | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No |- ! style="text-align:left;" bgcolor="#ececec" | DB2 | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | Firebird (database server) | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No |- ! style="text-align:left;" bgcolor="#ececec" | Informix | bgcolor="#ddffdd" | ? | bgcolor="#ddffdd" | ? | bgcolor="#fcfcfc" | ? | bgcolor="#ddffdd" | ? |- ! style="text-align:left;" bgcolor="#ececec" | Ingres | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | InterBase | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No |- ! style="text-align:left;" bgcolor="#ececec" | MaxDB | bgcolor="#fcfcfc" | ? | bgcolor="#fcfcfc" | ? | bgcolor="#fcfcfc" | ? | bgcolor="#fcfcfc" | ? |- ! style="text-align:left;" bgcolor="#ececec" | Microsoft SQL Server | bgcolor="#ddffdd" | Yes | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No |- ! style="text-align:left;" bgcolor="#ececec" | MySQL | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No |- ! style="text-align:left;" bgcolor="#ececec" | Oracle database | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes | bgcolor="#ddffdd" | Yes |- ! style="text-align:left;" bgcolor="#ececec" | PostgreSQL | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No |- ! style="text-align:left;" bgcolor="#ececec" | SQLite | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No | bgcolor="#ffdddd" | No |- style="background: #ececec" ! ! Range ! Hash ! Composite (Range+Hash) ! List |- |} ==See also== *List of relational database management systems ==External links== *[http://troels.arvin.dk/db/rdbms/ Comparison of different SQL implementations] *[http://wiki.astrogrid.org/pub/Astrogrid/DataFederationandDataMining/cross.htm Comparison of geometrical data handling in PostgreSQL, MySQL and DB2] *[http://www.geocities.com/mailsoftware42/db/ Open Source Database Software Comparison] *[http://www.devx.com/dbzone/Article/20743 PostgreSQL vs. MySQL vs. Commercial Databases: It's All About What You Need] Software comparison Database management systems Comparison of relational database management systems==Useless columns?== The price column is kind of useless because 1) DB server prices vary widely based on edition, number of users, etc., and are too complicated to go in a table cell by themselves and difficult to compare with other servers due to not being "apples-to-apples," 2) most of the "prices" are question marks, 3) even if they were filled in they would be obsolete quickly, and 4) the header says USD but the only actual price listed is in Euros. ISTM the point of the author was to distinguish free vs. non-free (beer) DBs, but the licensing column already does that. Also, I have NPOV concerns about "Proprietary" due to the content of the linked article. I'm not sure what a better link would be, however. -User:Craig Stuntz : I agree, let's remove it. And we should consider moving the "Index" and "Table" columns of the "Database object" table, since all RDBMSes support them. User:Tarvin 10:15, 8 Mar 2005 (UTC) :: Regarding indexes, there could be a single column listing which index types are supported, I guess, but even that suggests that more types are better, which isn't (IMHO) necessarily the case, especially when viewed from a usability point of view. I'd be OK with dropping the columns. -User:Craig Stuntz Another concern I have is with "schema." This term is vague (it can mean a specific server feature or just a database's metadata), which makes the column useless. -User:Craig Stuntz :Schema refers to the ability to create database schema, i.e. CREATE SCHEMA / CREATE DATABASE. While most RDBMS supports this, some don't. Anyway, probably not that useful, may drop it as well. --User:Minghong 09:28, 9 Mar 2005 (UTC) ::I regret that the schema column was removed. I've seen rather ugly DB designs which would have been nicer if schemas were used. User:Tarvin 11:39, 9 Mar 2005 (UTC) Nobody seems to oppose removing the price column. I'll remove it shortly, if noone steps up and complains. User:Tarvin 19:15, 9 Mar 2005 (UTC) === Revert index === What's a "revert index"? User:Tarvin 13:02, 9 Mar 2005 (UTC) :Revert index is available in Oracle. "Creating a reverse key index reverses the bytes of each column key value, keeping the column order in case of a composite key". For example, the value of the primary key ranges from 7000 to 8000. If a regular index is used, the B-tree (or R-tree) will be unbalanced. If they are reverted, i.e. 0008, 9997, .... 0007, the tree will be more balanced. --User:Minghong 15:29, 9 Mar 2005 (UTC) ::Ah, a reverse index. I've changed the page. User:Tarvin 18:31, 9 Mar 2005 (UTC) :::Oops, sorry for the typo. --User:Minghong 11:01, 10 Mar 2005 (UTC) == Question == Nice work! Do you have any plans to include information on scalability, replication, clustering and back-ups? For an example of a DB comparison structure see also: http://det-dbalice.if.pw.edu.pl/ttraczyk/db_compare/db_compare.html (if the link doesn't work see Google Cache). :Need to do some research first. :-P --User:Minghong 09:28, 9 Mar 2005 (UTC) :Some of these concepts are rather ambiguous (e.g., replication isn't just "replication", but includes variants such as synchronous/asynchronous), and some of the features are available only in an "enterprise"-edition of a DBMS, or as add-ons. I don't think that this page should be filled with debatable features. User:Tarvin 11:39, 9 Mar 2005 (UTC) What about MaxDB? (see i.e.: http://www.torsten-horn.de/techdocs/sql.htm#Vergleich-MySQL-PostgreSQL-MaxDB https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.km.cm.docs/documents/a1-8-4/MaxDB%20-%20An%20Enterprise%20Open%20Source%20Database.article) :Nobody would object to that, but someone has to do the work. User:Tarvin 11:39, 9 Mar 2005 (UTC) == OS support == The OS support matrix plots support for un-emulated OS support. Sybase explicitly mentions that it needs to be run with the Linux ABI FreeBSD add-on. In some definitions of "emulation", that would exclude Sybase on FreeBSD. Parts of FreeBSD's documentation http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/linuxemu-oracle.html use the word \"emulator\" for the Linux ABI support. User:Tarvin 11:39, 9 Mar 2005 (UTC) :Does that mean FreeBSD support should be "No" for Sybase and Oracle? --User:Minghong 15:37, 9 Mar 2005 (UTC) ::I have already set BSD support to "no" for Oracle, because Oracle doesn't mention BSD as a supported platform. For Sybase, I'm less sure: Sybase runs on FreeBSD through the Linux ABI compatibility libraries, so one might call it emulation. However, as Sybase officially mentions FreeBSD as supported, I'm inclined to let it stay as "yes". User:Tarvin 18:31, 9 Mar 2005 (UTC) == Index organized tables == I noticed that index organized tables (IOTs) were introduced, and then removed again. The reason for removal was that only Oracle supports them. This is wrong: "Clustering indexes" are a commonly known DBMS concept, and PostgreSQL (and probably others) supports them via the CLUSTER command. In PostgreSQL, however, row changes (including insertions/deletions) don't reorganize the table automatically (potentially a very I/O-intensive operation), so the CLUSTER-command needs to be re-executed when relevant. I also think that InnoDB tables in MySQL are implicitly index-organized (around the primary key, if nothing else is specified). User:Tarvin 12:46, 9 Mar 2005 (UTC) :Are they the same thing? Even so, the name is different, making it hard to be compared. --User:Minghong 15:37, 9 Mar 2005 (UTC) ::Vendors use lots of different terms for the same concepts; one has to get used to that. However, I don't think that clustering index support is important. User:Tarvin 18:31, 9 Mar 2005 (UTC) :: Sybase has clustered indexes too. That is on index creation (or reorg rebuild) the data is moved into the same order as defined by the index. During normal insert/update operations the ordering is skipped, so that the table gets fragmented. == Features in beta versions == I think it's disturbing that some features are mentioned as being available, but only in experimental versions. We are basically talking about the future (not facts) when planned features are mentioned. DBMS vendors are constantly working on new features, so the page could turn into a jungle of footnotes. Also: Planned features don't always turn into implemented features, as initially expected. ''If'' the page keeps notes about version differences, it would be much more useful to introduce notes about when a certain feature was added (i.e. notes about the past). User:Tarvin 12:58, 9 Mar 2005 (UTC) :The table will be based on the fact in the latest stable version. But footnote is free to list any version (so as to tell others than "it will have that feature ''really soon''". --User:Minghong 15:37, 9 Mar 2005 (UTC) ::Anything can happen ''really soon''. User:Tarvin 18:31, 9 Mar 2005 (UTC) == Bitmap indexes == The DB2 support for bitmapped indexes is questionable, see http://groups-beta.google.com/group/comp.databases.ibm-db2/browse_frm/thread/04dc64c4477fdd15/ceebf2908ab5143e this usenet discussion. User:Tarvin 13:06, 9 Mar 2005 (UTC) == B-tree or R-tree? == While B-tree (or B+-tree) is the simplest kind of index, I think most non-toy RDBMS would use R-tree instead. That's why I haven't specify whether it is B+-tree or R-tree. --User:Minghong 15:20, 9 Mar 2005 (UTC) :R-tree indexes are used for geometric data. It doesn't make sense to call it a "basic" index type. Actually, it would be relevant to add a column marking R-tree support in the different DBMSes. User:Tarvin 18:31, 9 Mar 2005 (UTC) ::I've added a column for support of indexing of geometrical data. User:Tarvin 09:26, 10 Mar 2005 (UTC) ::Really? Isn't multi-column index a R-tree (as R-tree, in simple terms, multi-dimensional B-tree)? e.g. CREATE UNIQUE INDEX emp_pk_idx ON emp( dept_id, staff_id ); I think that's a fundamental data structure, not necessary related to geometric data (although it certainly helps). --User:Minghong 10:18, 10 Mar 2005 (UTC)
:::It's true that an R-tree an be seen as a generalization of B-trees. But that doesn't mean that an index covering multiple columns is automatically an R-tree, as far as I know.User:Tarvin 10:47, 10 Mar 2005 (UTC)
::::Alright, it seems that some RDBMSes uses B-tree even when the index involves multiple columns. (I just wonder how... Multiple B-trees? B-tree is single dimension only...) P.S. I've added hash index since it is the most fundamental index. --User:Minghong 10:55, 10 Mar 2005 (UTC)
:::::Regarding multi-column btree indexes, as far as I know it is almost universal practice to implement an index on multiple (scalar) columns via a B+-tree. That's because a multi-column index is ''not'' multi-dimensional. User:Neilc 03:16, 19 Mar 2005 (UTC)
:::::You changed my "Geometric" index type to "R-tree". I disagree with that change. DB2, for example, has an index type for geometric data, but it's not strictly R-tree based (as far as I know). What's interesting is if the DBMS offers (at least one) multidimensional index type.User:Tarvin 11:09, 10 Mar 2005 (UTC)
Geometric is not specific enough, and R-tree is not ''just'' for geometric data. Unless there is an index type called "geometric", I don't think it should be used. Perheps a new column called "GIT" (DB2) [http://www.dia.uniroma3.it/~vldbproc/087_687.pdf] or "GiST" (PostgreSQL) [http://www.postgresql.org/docs/current/static/indexes-types.html]? --User:Minghong 11:35, 10 Mar 2005 (UTC)
:I have yet to see DBMS documentation mention R-trees in other contexts than geometry. I really think that the "R-tree" column is uninteresting in itself now, (and I suggest that it be removed). Exactly like I wouldn't care exactly which index type and implementation a DBMS uses for full-text indexing, as long as it supports efficient full-text index based queries. (A relevant column-addition candidate, by the way.)User:Tarvin 12:00, 10 Mar 2005 (UTC)
::I'm aware of full-text indexing. However there is no index type known as "full-text", i.e. CREATE FULLTEXT INDEX... or CREATE INDEX ... FULLTEXT ...? It should be put under "special features" or "other features" instead. --User:Minghong 12:30, 10 Mar 2005 (UTC)
== Fundamental RDBMS Features vs. Implementation Details ==
I have a general concern about listing implementation details such as index types and partitioning in a comparison article. Features like conformity to the relational model, SQL support, etc., are fundamental properties of RDBMSs and should be listed here. Partitioning, OTOH, is a kludge required because some DB servers can't perform acceptably (use whatever definition of "acceptably" you care to, here) without using it in some cases. People don't choose a DB server because it supports partitioning, they choose it because it allows them to quickly and concurrently manage data. If partitioning helps, that's fine, but you can't tell from looking at a chart indicating whether partitioning is supported and know whether it's required to get acceptable performance from that particular server.
In short, I think the most valuable comparison is one which sticks to the issues which affect all servers, such as price, licensing, relational model features, standard interface support (e.g., JDBC, ODBC, ADO.NET, etc.).
-User:Craig Stuntz
:I had thought about those programming interfaces. But since most possible all of them (except ADO.NET), there is no point listing them. --User:Minghong 10:24, 10 Mar 2005 (UTC)
== Stored procedures vs. user defined functions ==
The page currently has a "User defined functions" column and a "Stored procedure" column. If we want to distinguish between user defined functions and user defined procedures, then the "Stored procedure" column should be renamed. But before I do that: Does anyone know why both columns are there? User:Tarvin 18:41, 9 Mar 2005 (UTC)
:A stored procedures is usually PL/SQL (or similar languages); while a user defined function is not (e.g. linking to host language like PHP, or object files like .obj. --User:Minghong 10:24, 10 Mar 2005 (UTC)
::In SQL, there are two types of "SQL-invoked routines": Functions and procedures. They are almost identical, except for details of how they are invoked and how data are returned. DBMS suport is a bit different for the two routine types, by the way (PostgreSQL supports functions, not procedures, for example). I think you are talking about "external routines" which are routines (functions or procedures) executed by code written in a non-SQL language. What I find interesting to list is:
::*trigger support
::*support for SQL-routines (whatever kind)
::*what external languages are supported
::*support for user defined types
::User:Tarvin 10:58, 10 Mar 2005 (UTC)
:::Not sure about standard SQL. But I'm talking about UDF in Firebird [http://www.ibexpert.info/documentation/%20%203.%20Database%20Objects/%20%209.%20User-Defined%20Function%20(UDF)/179.html] and SQLite [http://hk2.php.net/manual/en/function.sqlite-create-function.php]. Maybe CREATE FUNCTION is not creating a UDF? I thought it was the same. --User:Minghong 11:04, 10 Mar 2005 (UTC)
::::The terminology I've used matches standard SQL. And the same terminology is used in the Oracle, PostgreSQL and DB2 documentation. User:Tarvin 11:21, 10 Mar 2005 (UTC)
I've tried unifying the "Stored procedures" and "User defined functions" columns. User:Tarvin 12:40, 10 Mar 2005 (UTC)
:Minghong, you have undone my unification, and then introduced two errors, and general confusion:
:*Error 1: The page currently says: "User defined function refers to external routines written in the host languages, such as C, Java, Cobol, etc.". This is wrong: A user defined function can be written in either SQL or an external language. If we want to display the difference between functions written in SQL and external binaries/scripts, then the term "external" needs to be emphasized, as "user defined function" is too vague.
:*Error 2: The page now states that PostgreSQL supports procedures - which is wrong (PostgreSQL has no 'CALL ...' construct). My previous edit removed that error.
:*Worse: The page now has columns for both functions and procedures (in addition to "User defined function"). Why have both, when the difference ''really'' is minimal (see my previous comment). And, if both are retained: At least, you need to specify the difference, if you introduce the separation of concepts.
:User:Tarvin 14:26, 10 Mar 2005 (UTC)
::Sorry for undoing your change. But unification makes it ambiguous. Procedure and Function are two things as there are 2 statements: CREATE PROCEDURE and CREATE FUNCTION (there are more, like packages, rountine, etc, but these are not common). If the differences are really that minimal, maybe combine the 2 columns. For the team UDF, checkout the SQLite, Firebird, MySQL, and PostgreSQL manuals. They consistently use the term "UDF" for external functions (well, DB2 seems not to follow this convention). OK, my fault, PostgreSQL does not support procedures (that's why 2 columns is better than 1 column: we can show that difference). --User:Minghong 15:24, 10 Mar 2005 (UTC)
:::I'm not sure it's very informative to say that PostgreSQL does not support stored procedures. Sure, it does not implement CREATE PROCEDURE, but that is mere syntax — functions in PostgreSQL can do much (although not all) of what can be done using stored procedures in other database systems. Not supporting "CALL", for example, is trivial -- it would merely be syntax sugar for SELECT some_func(). I think we need to decide on a clear definition of what the distinction between a "stored procedure" and a "function" is. User:Neilc 03:20, 19 Mar 2005 (UTC)
== Release date ==
Some digging in Google turned up [http://groups-beta.google.com/group/comp.os.linux.announce/browse_thread/thread/a0123d1842d9bb5b/fab1bd3bd0317348 1997 as the first release of mysql]. User:Turnstep 20:28, Mar 25, 2005 (UTC)
== Wow ==
The duplicate header rows for such small tables are incredibly silly. Oh well. There's no point in instructing Wikipedians proper practice in technical communication. You'll just blow it off as "elitist/vague." At least Apple understands concise interface design. No duplicate elements, because the user is not retarded.
:Other comparison pages are also following this convention. --User:Minghong 17:35, 11 May 2005 (UTC)
== Informix? ==
While I am an Informix user, I don't have enough infomration to answer all of the questions here. Would it be appropriate to add Informix when I get additional information?
:I find Informix rather interesting from a technical point of view. Some might think it's dead, because another major DB vendor bought it. However, it seems that updates for Informix (not just bug-fixes) are still being developed, so I find it OK to add Informix. User:Tarvin 07:43, 24 May 2005 (UTC)
== Informix Added ==
I added the Informix RDBS to the tables. I am a regular user, but *not* a Guru on it, so some questions I was unable to answer. Hoping others will check. User:Naraht 14:30, 24 May 2005 (UTC)See other meanings of words starting from letter: CCA | CB | CD | CE | CF | CG | CH | CI | CJ | CK | CL | CM | CN | CO | CP | CR | CS | CT | CU | CW | CX | CY | CZ |Words begining with Comparison_of_relational_database_management_systems: Comparison_of_relational_database_management_systems Comparison_of_relational_database_management_systems
Sponsored links: praca, nurkowanie.
|
These materials are based on Wikipedia and licensed under the GNU FDL
YouTube.com videos better site than Turbo Tax 2007 |
|
|