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-01T18:18:42Z
Lists: pgsql-general
On 03/01/2018 11:47 AM, Daevor The Devoted wrote:
>
> On Thu, Mar 1, 2018 at 2:07 PM, Rakesh Kumar <rakeshkumar464@aol.com 
> <mailto:rakeshkumar464@aol.com>> wrote:
>
>
>     >Adding a surrogate key to such a table just adds overhead, although
>     that could be useful
>     >in case specific rows need updating or deleting without also
>     modifying the other rows with
>     >that same data - normally, only insertions and selections happen on
>     such tables though,
>     >and updates or deletes are absolutely forbidden - corrections happen
>     by inserting rows with
>     >an opposite transaction.
>
>     I routinely add surrogate keys like serial col to a table already
>     having a nice candidate keys
>     to make it easy to join tables.  SQL starts looking ungainly when you
>     have a 3 col primary
>     key and need to join it with child tables.
>
>
> I was always of the opinion that a mandatory surrogate key (as you 
> describe) is good practice.
> Sure there may be a unique key according to business logic (which may be 
> consist of those "ungainly" multiple columns), but guess what, business 
> logic changes, and then you're screwed!

And so you drop the existing index and build a new one.  I've done it 
before, and I'll do it again.

> So using a primary key whose sole purpose is to be a primary key makes 
> perfect sense to me.

I can't stand synthetic keys.  By their very nature, they're so 
purposelessly arbitrary, and allow you to insert garbage into the table.

-- 
Angular momentum makes the world go 'round.