Your models have implied meanings, so you'll have to explain a little more.
Clearly Students have a Many-To-Many relationship with Courses. Likewise, Teachers have a Has Many relationship with Courses (Unless you want to allow for a Course having many Teachers, in which case you'll need a Many-To-Many.
Other than that, what's a Program? Is that like Computer Science, where it details a series of Courses required?
What's a Batch? My best guess would be something like Math, where you can have Math Classes, but I could be wrong.
Semesters are clearly just a collection of Courses, so they have a Has Many relationship with them.
Also, I recommend adding in a Section Model, where a Course is just the curriculum, like Algebra, but a Section is an actual instance of the Course. This way, you wouldn't have data redundancy for things like Credit-Hours, Course Name, etc.
Another thing to consider is abstracting out a Person Model, because sometimes Teachers can be Students too.