Package My::Hosts; use base qw(My::Class::DBI::Subclass); __PACKAGE__->table('hosts'); __PACKAGE__->columns(Primary => qw(ID)); __PACKAGE__->columns(Essential => qw(name IPAddress location OS)); __PACKAGE__->has_many('mailservers', 'My::MailServers', 'host'); __PACKAGE__->has_many('webservers', 'My::WebServers', 'host'); # has_many also defines a column in the foreign class: # in this case webserver->host # which returns the relevant Hosts object when called. Package My::MailServers; use base qw(My::Class::DBI::Subclass); __PACKAGE__->table('mailservers'); __PACKAGE__->columns(Primary => qw(ID)); __PACKAGE__->columns(Essential => qw(MTA version)); Package My::WebServers; use base qw(My::Class::DBI::Subclass); __PACKAGE__->table('webservers'); __PACKAGE__->columns(Primary => qw(ID)); __PACKAGE__->columns(Essential => qw(httpd version CGI mod_perl port https));