> -----Original Message-----
> From: Philip Mak [mailto:[EMAIL PROTECTED]]
> Sent: Wednesday, June 13, 2001 7:07 PM
> To: [EMAIL PROTECTED]
> Cc: [EMAIL PROTECTED]
> Subject: Object Oriented Databases with MySQL
>
>
> Hello all,
>
> I've been experimenting with a programming technique idea I had that I
> call "Object Oriented Databases". The goal of the technique is to make
> programming database driven websites easier by allowing the website code
> (I use Apache::ASP, which is built on mod_perl) to access the database
> contents as objects rather than having to write SQL statements. (The SQL
> statements are in the .pm files that define the objects' methods.)
>
> I'm using this technique to develop shoujoai.com, a site that hosts
> stories written by various online authors. There is a table called
> "authors" that has fields such as "name" and "email". There is a table
> called "fanfics" containing the stories, which is linked to the "authors"
> table by the "aid" (author id number) field.
>
> In perl/MySQL, if I wanted to list all the stories, along with their
> authors, I would have to do something like:
>
> my $sth = query("SELECT * FROM fanfics, authors
>                  WHERE fanfics.aid = authors.aid
>                  ORDER BY fanfics.title");
> while (my $row = $sth->fetchrow_hashref) {
>   print "<a href=\".$row->{handle}.".html\">".$row->{title}."</a> by".
>         "<a href=\"mailto:".$row->{email}."\">".
>         $row->{name}."</a><br>\n";
> }
>
> In an object oriented style, I would do:
>
> use Fanfics;
> my @fanfics = Fanfics::loadall();
> for my $fanfic (@fanfics) {
>   print "<a href=\".$fanfic->handle.".html\">".$fanfic->title."</a> by".
>         "<a href=\"mailto:".$fanfic->author->email."\">".
>         $fanfic->author->name."</a><br>\n";
> }
>
> In the object oriented version, the resulting code is simpler (I don't
> have to write MySQL statements in there). This simple example doesn't show
> the full potential of this technique, because all the fields in the
> database are simple ones - I don't have to combine data from multiple rows
> in order to get a single piece of information about an entity.
>
> Fanfic.pm would look something like this:
>
> sub loadall {
>   my $sth = query("SELECT * FROM fanfics ORDER BY title");
>   my @fanfics;
>   while (my $row = $sth->fetchrow_hashref) {
>     push(@fanfics, bless($row));
>   }
>   return @fanfics;
> }
>
> sub title {
>   my $self = shift;
>   if (@_) { $self->{title} = shift }
>   return Apache::Util::escape_html($self->{title});
> }
>
> sub author {
>   my $self = shift;
>   return Author::loadaid($self->{aid});
> }
>
> One of the early problems I'm running into with this style of programming
> is that the flexibility of the MySQL queries is somewhat limited.

You have to define what you mean by limited.  No foreign constraints?  They
are now availble with the new mysql release, but you must use BSD tables.
See www.mysql.com.  What else is limiting?

Ilya


In a
> database driven website where the relationships between the database
> tables/entities are well defined and known in advance, ad hoc queries are
> probably not needed so that the design of the *.pm files can account for
> every possible query that may need to be executed.
>
> Has anyone ever done anything like this before? Do you have any comments
> about this technique?
>
> Thanks,
>
> -Philip Mak ([EMAIL PROTECTED])

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to