Re: how could a foreign key ever be NULL? - Mailing list pgsql-sql

From Stephan Szabo
Subject Re: how could a foreign key ever be NULL?
Date
Msg-id 20011217120557.X53003-100000@megazone23.bigpanda.com
Whole thread Raw
In response to how could a foreign key ever be NULL?  (Terrence Brannon <metaperl@mac.com>)
List pgsql-sql
On Mon, 17 Dec 2001, Terrence Brannon wrote:

> The Momjian book states:
>
> A single-column foreign key is either NULL or matches a primary key
>
> But the problem I have with this statement is that a primary key
> cannot be null or duplicate. And since the foreign key references
> a value that is neither null or duplicate, how could it ever be
> NULL?

First, you don't need to reference a primary key.  Any unique constraint
should work (11.8 referential constraint definition, Syntax rules 2a),
"If the <referenced table and columns> specifies a <reference column
list>, then the set of column names of that <reference column list>
shall be equal to the set of column names in the unique columns of
a unique constraint of the referenced table."  You're probably confusing
it with the behavior that if no column list is given it goes to
the primary key columns (11.8 SR2b I believe).

As for the NULL part, 4.10.2 Table Constraints, (ignoring the not
implemented match partial), "A referential constraint is satisfied
if one of the following conditions is true, depending on the <match
option> specified in the <referntial constraint definition>:- If no <match type> was specified then, for each row R1 of
the referencing table, either at least one of the values of the  referencing columns in R1 shall be a null value, or
thevalue of  each referencing column in R1 shall be equal to the value of the  corresponding referenced column in some
rowof the referenced  table.-  If MATCH FULL was specified then, for each row R1 of the refer-   encing table, either
thevalue of every referencing column in R1   shall be a null value, or the value of every referencing column   in R1
shallnot be null and there shall be some row R2 of the   referenced table such that the value of each referencing col-
umn in R1 is equal to the value of the corresponding referenced   column in R2."
 




pgsql-sql by date:

Previous
From: Oliver Elphick
Date:
Subject: Re: how could a foreign key ever be NULL?
Next
From: Oleg Lebedev
Date:
Subject: Re: won't drop the view