I want to persist contact details for persons.
Since persons could include both staff and clients, the natural step would be to have a single table of contacts for all persons. As oNare suggested in a comment above, just create a contactType field in which you can assign either person type. This solution has the benefit of adding in future, if a need arises, any new person types or subtypes.
The only reason you should have clientContact and staffContact in separate tables is some compelling business reason that suggests those contacts have to be isolated from each other for security, data compatibility, access rights, data entry, and so forth.
EDITS
I still don't see the benefit of contactType, as any entry in 'contact' will be referenced by a FK either in 'staff' or 'client'.
Which table has the 'staff'? If 'staff' and 'client' are in the same table, sure there is no benefit as long as you have another way of distinguishing the two. Your schema does not show 'staff'.
If a client or staff entry is removed, its contact will be deleted using the FK.
That can be controlled depending on the database design and maintenance. Look into enabling/disabling cascading deletes whether you want to keep such records or not. Depends on your apps requirements.
contact
asid_contact_type
and just make a tablecontact_type
that would haveid_contact_type
anddesc_contact_type
.