This is a very well-known and debated issue in the drupal world.
this function is called cck "multigroup", and it is quite difficult to implement. there are a lot of posts about this in the drupal forum, I suggest you start here:
http://drupal.org/node/494100
this is a kind of "hidden" function in the cck module. being in the module catalog, you will find instructions here:
SSK / modules / content_multigroup / README.txt
Edit: Current work on the multigroup module has moved to experimental CCK 3.0.
in the meantime, you can try to deal with this using the flexifield module (but this is a kind of hacking, I will not use it in production)
source share