Re: Foreign Keys as first class citizens at design time?

From: Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com>
To: Stephen Feyrer <stephen(dot)feyrer(at)btinternet(dot)com>, pgsql-general(at)postgresql(dot)org
Subject: Re: Foreign Keys as first class citizens at design time?
Date: 2015-08-14 00:14:12
Message-ID: 55CD32D4.3050008@aklaver.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 08/13/2015 05:03 PM, Stephen Feyrer wrote:
> Hi,
>
> This is probably not an original question merely one which I haven't
> been able to find an answer for.
>
> Basically, the question is why is there not an equivalent foreign key
> concept to match the primary key we all already know an love?
>
> How this would work, would be that the foreign key field in the host
> table would in fact simply be a reference to a key field in the guest
> table. Then in the respective SQL syntax a semantic reference may then
> be made whether or not to follow such links.
>
> Therefore as an example:
>
> {system:{"primary-key":"1","child-key":"","date":"20150421","directory-name":"Bucket
> List","user-attribute":"Bucket(dot)List(at)example(dot)com"},
> {"primary-key":"2","child-key":"","date":"20150421","directory-name":"Supernova","user-attribute":"supernova(at)example(dot)com"},
> {"primary-key":"3","child-key":"5","date":"20150422","directory-name":"Transactional","user-attribute":"transactional(at)transaction(dot)org"},
> {"primary-key":"4","child-key":"","date":"20150503","directory-name":"Spam","user-attribute":"allmyspam(at)lovesspam(dot)com"},
> {"primary-key":"5","child-key":"","date":"20150506","directory-name":"Relational","user-attribute":"relational(at)transaction(dot)org"}}
>
> SELECT directory-name FROM system WITH-IMPLICIT-JOIN WHERE-PK-IS-NOT-LINKED
>
> This would yield
>
> directory-name directory-name
> Bucket List
> Supernova
> Transactional Relational
> Spam
>
> Alternatively linking two user tables - profiles and contacts
>
> profiles
> PK-profiles
> user-name
> real-name
> age
> gender
> region
>
>
> contacts
> PK-contacts
> FK-profiles
> phone
> email
> icq
> home-page
>
> Getting the user-name and email would look something like:
>
> SELECT user-name, email FROM profiles WITH-IMPLICIT-JOIN
>
>
> When building our databases we already put a lot of work in normalising
> as much as we can. Then after all that work we have to virtually start
> again building up select, insert and update statements etc. all with all
> that referential integrity in mind.
>
> The advantages of a first class foreign key field as I see it are at
> least two fold. One it make building and maintaining your database
> easier. Two it is a means to provide some iterative structures easily coded.
>
> To me this looks like a good idea.

What happens if you have more then one child table with the same field?

So:

contacts
FK-profiles
....
email
....

vendors
FK-profiles
....
email
....

>
>
> --
> Kind regards
>
>
> Stephen Feyrer

--
Adrian Klaver
adrian(dot)klaver(at)aklaver(dot)com

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Martín Marqués 2015-08-14 00:22:41 Re: Sync replication + high latency server
Previous Message Stephen Feyrer 2015-08-14 00:03:46 Foreign Keys as first class citizens at design time?