Modeling of hospitals and general practices:

'location' table contains common information
'hospital' table contains hospital specific info and a location_id
'general practice' table contains GP specific info and a location_id

Person:

'referrer' table contains common info

'post' table links referrer+location (e.g. $general_practitioner, $general_practice)

'hospital_post' table links post+speciality (to get $clinician (post.referrer), $hospital (post.location), $specialty (hospital_post.specialty)

Case:

provides location

Request:

provides referrer, case

To find the right person/post, lookup location+referrer to get post. If a hospital post record exists
for this post id, -that- provides the specialty (if it doesn't exist, it's a GP referral)