Staging / Production w/ common DB and Assets
Database

I strongly discourage you from letting Staging and Production share a database. That is a recipe for disaster.

Your Staging site should be semi-disposable, and it's likely that your client will treat it as such. The last thing you want is for someone to make a change in Staging without realizing that they are also making the same change in Production. It's counterintuitive and dangerous.

Instead, have your Staging database be a copy of the Production database. There are several ways to do this, and with the right tools it is actually very simple to clone the database on a regular basis.

I'd recommend using Craft Scripts by Andrew Welch to quickly &amp; easily clone the database. I've found the pull_db.sh script to be quite invaluable.

Image Assets

Cloning images is also possible (Craft Scripts has a tool for that), but you may find that it eats up a ton of server space. This, of course, only matters if you're storing your asset files in a local folder. If the assets are cloud-based, then cloning them is a non-issue.

So instead of cloning your image files, I highly recommend the new Untransform plugin by Ben Croker. It allows your Staging server to actual use transformed images directly from the Production server. There won't be any need to store a second copy of those files, the Production site can provide the originals to your Staging environment.

Local Dev

You can use both of the aforementioned techniques on your local machine as well. Indeed, that's what they were originally created for.