Hi,
it would be a general good practice to limit mandatory aspects as much as you can because as the requirements may change, it could lead you to integrity issues.
My approach is to leave all of them not mandatory and to build another layer of abstraction configuring my application in order to decide whether an aspect is mandatory or not.
Doing so you can change your mind whenever you want without compromise you DB.
Regards,
Andrea