Re: Enforce primary key on every table during dev?

Ron Johnson <ron.l.johnson@cox.net>

From: Ron Johnson <ron.l.johnson@cox.net>
To: pgsql-general@lists.postgresql.org
Date: 2018-03-01T21:03:33Z
Lists: pgsql-general
On 03/01/2018 02:32 PM, David G. Johnston wrote:
> On Thu, Mar 1, 2018 at 1:24 PM, Ron Johnson <ron.l.johnson@cox.net 
> <mailto:ron.l.johnson@cox.net>>wrote:
>
>     Why have the overhead of a second unique index?  If it's "ease of
>     joins", then I agree with Francisco Olarte and use the business logic
>     keys in your joins even though it's a bit of extra work.
>
>
> ​The strongest case, for me, when a surrogate key is highly desirable is 
> when there is no truly natural key and the best key for the model is 
> potentially alterable. Specific, the "name" of something.  If I add myself 
> to a database and make name unique, so David Johnston, then someone else 
> comes along with the same name and now I want to add the new person as, 
> say David A. Johnston AND rename my existing record to David G. Johnston.  
> I keep the needed uniqueness ​and don't need to cobble together other data 
> elements.  Or, if I were to use email address as the key the same physical 
> entity can now change their address without me having to cascade update 
> all FK instances too. Avoiding the FK cascade when enforcing a non-ideal 
> PK is a major good reason to assign a surrogate.

There's always the "account number", which is usually synthetic. Credit Card 
numbers are also synthetic.  ICD numbers are (relatively) synthetic, too.

But that doesn't mean we have to use them willy-nilly everywhere.


-- 
Angular momentum makes the world go 'round.