There a many ways to achieve your goal, depending on your purpose.
Use sync to move data between bases and assign rights up to your needs.
If you want to restrict departments from access to some ‘Main base’, i would suggest to create another base for Contacts, open access for them and sync data from ‘Contacts’ to ‘Main’.
If you need to restrict them from each other, you need to set up multiple syncs.
I have written scripts that do this for clients. Each script needs to be customized to the exact base. There are also some limitations: prefilled urls have character limits, rich text fields have limitations, and attachment fields need special handling, etc. If you have budget to hire a script writer and would like to discuss options, feel free to book an appointment with me.