I tend to favor using a autonumber. And, even when I have something like a
invoice number, I still do NOT use that as the link for my relationships.
The reasons for this are many, but for example, you might want to setup a
customer invoice, but NOT generate the invoice until a certain approval, or
other things have taken place. By using a autonumber, the applications will
continue to run.
the same goes for a social insurance number etc. My payroll system would
allow you to enter names, and continue to function while the user brings in
their social insurance number. In other words...why should my application
break, or not function just because I don't have (or even want) a invoice
number until the invoice is complete?
Further, users don't care about how relationships work....I mean, do you
care about the memory references used when word functions? Stuff like
relationships, and memory pointers and software code is for the
developers..and the end users don't have to (or should not have to) even
care, or even be aware of such things. There is zillions of memory, and
pointers and all kinds of things that allows your computer to run word, but
the users never see the code, or memory values that the developers used to
make word function.
When you use a commercial application like QuickBooks, or even use outlook
for contact management, do you even care, or think about the ZILLIONS of
fields and values used that you DO NOT SEE to maintain the relationships?
(no...you don't care one bit).
Good software just functions...and as a general rule stuff used for
relationships should just work..the same goes when you get up and turn on
the lights..they just work..and you don't start thinking about electrical
wiring that makes the light bulb go....