Eventually, you are going to need persistent objects, or just some way to store and retrieve data. The approach you use depends on many factors, such as: * Do you have a lot of data to store? * Must you work with an existing database schema, or can you start from scratch with a new schema? * Do you need/want to have a traditional relational model so that you or your users can use standard report generating tools? * Do you need close control over the database schema for purposes of optimization? * If you must use an RDBMS, does it have object-relational features (e.g., inheritance) like say, PostgreSQL? * Do you need support for transactions to commit changes to one or more objects/data fields atomically? * Do you care about ACID compliance (because your data and/or transactions are mission critical)? * Do you care about closed source vs. open source? * Must you support ad-hoc online queries, report generation, hot database backups, and heavy multi-user or transaction intensive use? * How much do you want to spend? Possible Solutions ------------------ The following is a list of possible solutions: * Use an object-oriented database or object store like ZODB * Use an RDBMS and the Webware MiddleKit object-relational mapper * Use an RDBMS and some other object-relational mapper. Possibilities include: * PyDO_ * `Database Objects`_ (dbObj) * SQLObject_ * Modeling_ * Forget about object-relational mapping--use the Python DB API and an RDBMS directly * Use DBUtils_ on top of the Python DB API * Use Python's pickle and shelve modules * Roll your own system with a flat file .. _PyDO: http://skunkweb.sourceforge.net/pydo.html .. _Database Objects: http://www.xs4all.nl/~bsarempt/python/dbobj.html .. _SQLObject: http://www.sqlobject.org .. _Modeling: http://modeling.sourceforge.net Pros and Cons of Each Solution ------------------------------ * `ZODB`_ * `MiddleKit`_ * `PyDO`_ * `dbObj`_ * `Python DB API and RDBMS`_ * `Python's pickle and shelve modules`_ * `Roll your own system with a flat file`_ Comments about various RDBMS and OODBMS Systems ----------------------------------------------- * `Informix`_ (proprietary) * `InterBase`_ (open source) * `MySQL`_ (open source) * `Oracle`_ (proprietary) * `PostgreSQL`_ (open source) * `SAP DB`_ (now open source, based on ADABAS code) * `SQL Server`_ (proprietary) * `Sybase`_ (proprietary) More about RDBMS and OODBMS Systems ----------------------------------- * `Database Debunkings`_ is a great place to look for intelligent discussion about database issues by people like C.J. Date and Fabian Pascal. * searchDatabase.com_ seems to be another great site to start exploring the literature on databases. * `When will they ever learn`_ is a critique (by Fabian Pascal) of an exchange on whether MySQL and Innobase are DBMSs, or even relational. C.J. Date makes an appearance, and you get to hear the horses speak directly. * `Linux RDBMS Library`_ Compilation of free readings on Linux relational databases. * What exactly is a relational database? C.J. Date explains in `A Closer Look at Relational Database`_. This site requires free registration. * Fabian Pascal explains why SQL sucks and why all SQL DBMS violate important relational features, some more than others in `Little Relationship to Relational`_. * Think OODBMS are the bee's-knees? Better read this_ first. .. _Database Debunkings: http://www.firstsql.com/dbdebunk/index.htm .. _searchDatabase.com: http://searchdatabase.techtarget.com/home/ .. _When will they ever learn: http://searchdatabase.techtarget.com/tip/1,289483,sid13_gci788645,00.html?FromTaxonomy=%2Fpr%2F284872 .. _Linux RDBMS Library: http://www.palslib.com/ .. _A Closer Look at Relational Database: http://www.brcommunity.com/cgi-local/x.pl/commentary/b068.html .. _Little Relationship to Relational: http://www.firstsql.com/dbdebunk/fp4a.htm .. _this: http://searchdatabase.techtarget.com/tip/1,289483,sid13_gci769023,00.html?FromTaxonomy=%2Fpr%2F284872 -- EdmundLian_ - 30 Dec 2001