• If you already have separate tables for staff, contacts, and companies, then it probably makes logical sense to stay consistent and have 3 separate link tables.  While it is possible to have 1 link table with the 3 different foreign keys, you'd probably also want a check constraint then to enforce that only 1 of the 3 foreign key columns is populated for each row.  It would probably also be more confusing writing those joins with a single link table.