• Primary keys should be non-human readable like a guid...at least in pure theory.  I love them.  Never use a natural key like an SSN because your life will become miserable; there are many SSN dupes and updates will kill you.  And stay away from those pathetic identity columns.  Use Sequences or newid() instead so you can generate primary keys from the app instead of RBAR identity inserts.

    Demand alternate keys (unique constraints) for virtually every table.  Some tables may have two or three alternate key groups of columns.  If you don't get this right, development will suffer and you will be babysitting the database and cleaning up all the time and I will think you are masochistic.

    Use positive logic names throughout such as IsShipped instead of negative such as IsNotShipped.

    Always store base data and never calculated stuff like ExtendedCost.  It is cheap to recalc on the fly or add computed columns or views.

    Err on the side of making columns not null and force developers to request nullable if needed.  Performance and simplicity suffer from too many nulls.