This is a really interesting message found on the Byte magazine discussions for anyone who ever thought about implimenting a Postgres storage for Zope. -Michel robin <robin@nospam.org> wrote in message news:<7u0kr7$st4$1@cmpweb-media0.web.cerf.net>...
Jon Udell <udell@monad.net> wrote in message news:380367CF.7AAB0D90@monad.net...
What features does DB2 have which make it an ODBMS?
I'm not sure.
But...can you tell us more about the object features of PostgreSQL,
and
how you're using them?
Jon Udell
PostgreSQL adds an "inherits" clause to the CREATE TABLE statement, so an unimaginative example would be:
create table people ( forename text, surname text, initials text, email text );
create table staff ( office text, extension text ) inherits (people);
create table clients ( organisation oid ) inherits (people);
This would create three tables, people, with fields; forename, surname, initials, email, staff; with fields forename, surname, initials, email, office and extension, and clients; with fields forename, surname, initials, email and organisation.
Queries can then be made on any of the tables individually in the normal way, but also using an extension syntax:
select * from table people*;
Which would query table people, and all tables which inherit from it. In fact the Postgres documentation makes reference to "classes" instead of tables. Clearly a query such as this can only return the fields which are common to all of the tables in the hierarchy, i.e. the fields of the base class.
I have used this feature with Perl to implement a simple object persistence veneer above DBI. I create a base class called object to start the hierarchy;
create table object (class text default 'object');
and then further classes are like this;
create table people (class text default 'people', forename text, surname text, initials text, email text );
etc.
The "class text default '<class name>'" field results in every row having the name of the table it was entered into associated with it. PostgreSQL also assigns a unique OID to every row in the database, so using the people example, I can do "select *,oid from people*", retrieve the results using fetchrow_hashref and then bless the rows with the contents of their own class field.
The result is a list of perl objects, each of the appropriate type. The perl classes can in turn inherit from a base dbobject class which can generate the correct insert code automatically.
This is how I handled object persistence in a number of web based applications for written for clients of my previous employer. I've changed jobs, and expect to be working in Java, probably with DB2 and Websphere. I know little about DB2, except that it's been called an "ORDBMS", and I wondered what the term is referring to.
--
-Robin Barooah robin(at)sublime.org