person_id mediumint unsigned auto_increment primary key,
sex char(1) default '?' not null,
modified date not null
####
name_id mediumint unsigned auto_increment primary key,
name varchar(255) not null
####
person mediumint unsigned not null, /* references 'person' */
firstname mediumint unsigned not null, /* references 'name' */
lastname mediumint unsigned not null /* references 'name' */
####
package Person;
use strict;
use warnings;
use base 'My::DBI';
Person->table( 'person' );
Person->columns( All => qw(person_id sex modified) );
Person->has_many( names => 'PersonName' );
1;
####
package Name;
use strict;
use warnings;
use base 'My::DBI';
Name->table( 'name' );
Name->columns( All => qw(name_id name) );
1;
####
package PersonName;
use strict;
use warnings;
use base 'My::DBI';
PersonName->table( 'person_name' );
PersonName->columns( All => qw(person firstname name) );
PersonName->has_a( firstname => 'Name' );
PersonName->has_a( lastname => 'Name' );
####
#!/usr/bin/perl
#
use strict;
use warnings;
use Person;
my $Person = Person->retrieve( 1 );
my $names = $Person->names();
while ( my $Name = $names->next() ) {
print $Name->lastname()->name() . ', ' . $Name->firstname()->name() . "\n";
}