I marked your circular reference for better understanding.
I hope this will make it more easier to solve the issues.
The problem is that vContracts, vSite, vVehicles and ContractLink table create a circular reference.
E.g. if you can drop vehicleid from ContractLink table it would be solved, also just rename the field from "vehicleid" to "vehicleid_ref" will solve it. I don't know your requirements so let me know if this already helps you.