Relationship Between Students, Parents and Guardians
Your design with 5 tables is more normalized than your initial design, and makes more sense.
When you say &quot;pivot table&quot; it sounds like you mean a linking table. Since the relationship between students and parents (and also between students and guardians) is a many-to-many relationship being that a student can have up to two parents, and a parent can have multiple children (students) then this is the proper way to relate the two tables in a normalized form, and good design.
The only thing I think you could do is consolidate the parents and guardians into one Table (assuming they have basically the same attributes) and have a type field to determine if it's a parent or guardian. If there's only two types, you can use a boolean datatype field called IsParent, or with more types you can create an enum table called RelationshipTypes (or something similar) and store the ID in your consolidated Table, for normalization.
The IsParent field would be best to put on the linking table, that way a Guardian can be a parent to one Student but only a Guardian to another Student (who isn't related by blood) in cases of like adoption, etc.
Here's a sqlfiddle to illustrate the above, with some tweaks.