in reply to
How to structure applications using a RDBMS
My personal favorite DB application design model is OOP. I usually end up making an object with the same field names as the database table to represent each object.
pseudo:
package Project::User;
my @FIELDS = qw /name age sex passwd/;
sub new {
my $type = shift;
my $dar = shift or return undef; # data array ref, usually
# a fetchrow_arrayref
if (ref $dar = array) {
# they already pulled the data, we're just holding
# it for display or an update
} elsif ($dar =~ /^\d+$/) {
# if it's a unique ID, pull the data from the db
} else {
# it's just empty, we're empty
}
my %init = ();
my @init{ @FIELDS } = @$dar;
}
sub pullFromDB {
my $self = shift;
my $uid = shift or return undef;
# sql code to pull from DB
}
sub dbSync {
my $self = shift;
# db commit stuff here
}
sub assignArgs {
my $self = shift;
# utility function to assign data values to object properties
}
... ok that's a bit much to write out, but I hope it presents the basic ideas I've used. Usually the object is used like
$user = new Project::User($uid); or
$user = new Project::User($sql->fetchrow_arrayref);
It makes it very easy to operate on the front-end. Or perhaps it's just needlessly complex :P