The pro would be that since the check is at the database level, you can ensure that there will never be any junk that gets into your database if non-SF applications touch it. The con would be that you're not going to know about the constraint until you try to save the record, then it will throw an exception, so you'll also want to add a business rule to the business object to prevent saving when the field is blank. We have the RequiredFields collection that can be edited through the class component designer just for this.
As for adding the constraints, we don't support them through the UI, but you can add a post-deployment script in the DDT to add anything you want.