I tend to go with the most restrictive "rules" on all user defined names -
tables, columns, queries, variables, etc.
1. May contain ONLY a-z, A-Z, 0-9, and the underscore _
2. Must start with a letter (upper or lower case)
3. Must be limited to 30 characters (I don't violate this rule with table
and column names but may with other names).
A large number of the apps I create get upsized to SQL Server, DB2, or
Oracle and this avoids issues with table and field names - plus personally,
I hate having to enclose mal-formed names in square brackets. I rarely use
underscores so mostly I just use letters, starting each word or word part
with a capital. For example - CustName, BrokerID, SourceCD, Addr1 (for the
first line of an address - this isn't a violation of first normal form - it
is a convenience for creating mailing address so the user can determine what
goes on each line).