Perhaps a simple tree structure (a la Windows Explorer) with appropriate styling could do the trick. Consider this website: the answers are your teachers, and the comments are your children. They are basically listed one after the other, with children appearing under their teacher (comments under answers), but the styling and explicitly named links (eg. add comment) make it obvious which button affects which item.
For example, you could provide a list of teachers with edit and delete buttons on their left hand side (this website shows certain buttons only on mouse-over to avoid the clutter, which may or may not be appropriate in your case). At the bottom of this list, an "add teacher" button makes it obvious how to add a new teacher to the list. On the right hand side of each teacher, a "students (nb)" button shows, at a glance, how many children take lessons with this teacher and allows the unfolding of the list of these children. Being styled very differently (think answers vs comments), the children are not confused with the teachers, even though they appear in the same list. On their left are the expected edit and delete button, and at the bottom of the list, the "add child" button. The idea is to provide consistent functionality (edit / delete on the left, add at the bottom) for both teachers and children, but contrasting visuals to avoid confusion. Collapsible student lists allow the user to see more teachers at once, making it easier to find the one he/she is looking for.
Using trees has many advantages:
- Users mostly already know how to use them
- They are efficient on large screens as well as small
- They are easy to navigate (just scroll away)
- etc.