Lynn,
What is the problem with a compound index? If a table's primary key consists
of 8 fields and the table only has 8 fields then why not define it as the
primary key? For a start you may actually get better performance on some
engines as only the index needs to be accessed not the base table.
AutoNumbers, Identity, OID, ROWID and Record Numbers are non-relational
procedural programmer constructs, okay so there are not obscure (but they
should be - coming from the punched tape days before R) and they should be
avoided at all costs. That is not to say that exposed surrogates (I think I
prefer to call these artificial keys) should not be used but these should
come from the real world, Account Numbers, Bar Codes, EANs, UPC, VIN, ISBN
or a carefully designed new one for use by the users.
There are certain fairly rare occasions when one cannot find a natural key
and that is when a designed artificial key should be employed, but not an
exposed surrogate such as AutoNumber or Identity.
If SQLS employed a hashing algorithm like other "grown-up" DBMSs then using
a new surrogate/artificial key, when a natural key existed would add
overhead. Hashing algorithms generate a DBMS internal reference to join
records in related tables (a true surrogate key!). The user and that
includes the Database Designer do not even see these numbers.
Designing and implementing the "correct" design without surrogates (as
defined in your message) will allow your database to be infinitely more
portable.
I am not sure where I saw it first but I think the saying that using a
surrogate/artificial key where a perfectly good natural key exists is like
wearing two watches, one is never sure what time it is.