First, a. and b. can be two records in the same table. A self join or even a many to many self join can be used to establish the needed links between a student contact and other contacts. This enables you to link a given student to as many other contacts as is needed and with a "many to many self join", two students can link to the same contact--as might be the case with students that are siblings.
Contacts and Contacts 2 are two Tutorial: What are Table Occurrences? with the same data source table.
Contacts::__pkContactID = ContactJoin::_fkContactID
Contacts 2::__pkContactID = ContactJoin_fkLinkedContactID
For an explanation of the notation that I am using, see the first post of: Common Forum Relationship and Field Notations Explained