A column trigger is not what you want. One way to accomplish your goal would be to name your relationships with leading underscores and then write your own underscore-less methods to do the "make one if it doesn't yet exist" thing:
sub detailed_summary
{
my($self) = shift;
my $existing_object = $self->_detailed_summary(@_);
unless($existing_object)
{
# Create a new object
my $new_object = My::Summary->new(...);
# Assign it to its parent so it will be stored in the
# database when the parent is save()d, then return it.
return $self->_detailed_summary($new_object);
}
return $existing_object;
}
You could also do the same thing by wrapping the generated detailed_summary() method after it's created, either manually (using typeglobs and subroutine references), or with a CPAN module that can wrap existing subroutines.
(The code above is quite regular and you should be able to automate its creation if you end up doing this a lot.)