I would never allow spaces. It creates far too much confusion and potential issues with "ProductID" and "ProductID ". Even "Product ID" can be misread.
Underscores I dislike, but if that's what's there, I wouldn't refactor.
I did see a design presentation that I liked. This made every column name unique, so that we always knew were data was. This was something like:
create table product
( Productkey int
, Productname varchar
, productdescription
)
create table order
(orderkey int
, OrderProductKey int references Product(productkey)
, qty int
)
I'm torn on this. Knowing every item is interseting. Not sure of the value, and if you didn't have DRI this could be a mess, but it was interesting food for thought.
I am a bit fan of describing columns more completely with intellisense and 128 char identifiers. Make it easy to understand the column.