Well, I'll take up the subject a bit MrAlaska, on foreign keys. They don't just protect you from yourself, they protect your data from your whole team. More than once I've had a new developer come into a project and not quite get some part of it. While this isn't so big a deal for some things, for others, like inventory systems, or payroll, financial, etc... it can be a very big deal.
If the database makes sure that the foreign key constraints are enforced, then that's one less area for a newbie to make a mistake. If you want to get rid of foreign key constraints for performance reasons, the best bet is to use stored procedures, which will make the whole update happen in a transaction as an all or nothing kinda thing. The performance of transactions with the reliability of foreign keys. Just a little more up front work, but still well worth it.