Design using multiple tables for 1 booking table
Common table will be the best approach in my opinion. For example, 

Person (person_id (PK), first_name, last_name, birthday);

Student (person_id(PK,FK to Person),...);
Staff (person_id(PK,FK to Person),job_title);
Association_member( person_id(PK,FK to Person), reg_date) ;
Resource_hire_log(resource_id, person_id (FK to Person), ....) ;


You may also think about Student, Staff, and Association member as roles which person can play .  Then you don't need Student, Staff, etc tables, but Role and Person_Role. 

Alternatively, you can use exclusive arcs approach : 

Resource_hire_log(resource_id, 
 student_id (FK to Student), staff_id (FK to Staff),   
 association_member_id (FK to Association_member), .... )


Then you will need to add check constraint to ensure only one of (student_id, staff_id, association_member_id ) is not null.