The Migration class is built on the fundamental assumption that there is a one-to-one correspondence between source rows coming in and destination objects going out.
If however your source data corresponds to more than one Drupal object or entity, there are several ways to deal with this depending on the complexity of the different destination objects.
Create dependent objects on the fly
If you have simple objects as dependencies of a more complex one, you can create these on the fly in your migrate class's prepareRow() or prepare() methods. This is particularly suitable if your dependent object's data is only one field in your source data.
The downside however is that these dependent objects are not cleaned up on rollback, and depending on how you make them, you may not be able to implement cleaning them up yourself (as once you've created the missing objects, you can't tell which ones were missing before).
A special case is taxonomy term reference fields, where the 'create_term' field option lets you create taxonomy terms for source data that doesn't match an existing term.
Even if your destination object requires more than one source field, it can be useful to take this approach, for example, here we create taxonomy terms on the fly taking their term name from one source field and set a field value on them based on another source field:
<?php