# Re: Foreign keys

Date: Tue, 15 Jan 2008 12:56:19 -0500

Message-ID: <2008011512561916807-kirakun_at_earthlinknet>

On 2008-01-15 11:51:43 -0500, "Brian Selzer" <brian_at_selzer-software.com> said:

> > "Kira Yamato" <kirakun_at_earthlink.net> wrote in message > news:2008011510320716807-kirakun_at_earthlinknet... >> On 2008-01-15 04:37:23 -0500, "Brian Selzer" <brian_at_selzer-software.com> >> said: >> >>> >>> "Kira Yamato" <kirakun_at_earthlink.net> wrote in message >>> news:2008011502240916807-kirakun_at_earthlinknet...

>>>> On 2008-01-14 21:18:57 -0500, "Evan Keel" <evankeel_at_sbcglobal.net> said:

*>>>>*

>>>>> Always a physical issue. Never a theory issue.Agree?

*>>>>*

>>>> Foreign keys are functional dependencies across two relations.

*>>>>*

*>>>> More specifically, let*

*>>>> R1(K1, A1, B1)*

*>>>> be a relation with attribute sets K1, A1 and B1 where K1 is R1's primary*

*>>>> key and B1 is a foreign key to the relation*

*>>>> R2(K2, A2)*

*>>>> where K2 is R2's primary key and A2 is the set of its remaining*

*>>>> attributes.*

*>>>>*

*>>>> Then the foreign key B1 represents the functional dependency*

*>>>> B1 --> A2,*

*>>>> which is the functional dependency across two relation I mentioned in*

*>>>> the*

*>>>> first sentence.*

*>>>>*

*>>>> Furthermore, through transitivity by the functional dependency K1 -->*

*>>>> B1,*

*>>>> the foreign key also represents the inter-relational functional*

*>>>> dependency*

*>>>> K1 --> A2.*

*>>>>*

*>>>> Am I correct to say this?*

*>>>>*

>>> >>> I don't think so. A functional dependency A --> B is surjective, meaning >>> not only that for every A there must be one and only one B, but also that >>> for every B there must be at least one A. The relationship between B1 >>> and >>> A2 above is injective, as is the relationship between K1 and A2. >> >> Hmm... According to Atzeni/De Antonellis's book "Relational Database >> Theory" (section 1.6) he does not include surjectivity as a requirement >> for functional dependency. >> >> -- > > Functional dependencies are defined in terms of sets of attributes within > the same relation schema. A functional dependency is a statement, A --> B, > where A and B are sets of attributes. A relation satisfies the functional > depencency if and only if whenever two tuples agree on values for A they > also agree on values for B. Since both A and B appear in the same relation > schema, whenever there is a value for B, there must also be a value for A. > So it does not matter whether it is a stated requirement, surjectivity is a > property that functional dependencies exhibit.

I think you're confusing the domain of an attribute with the set of attributes itself.

An *attribute* is a variable that can participate in a relation. Each attribute has an associated set of values, which is called the *domain* of the attributes.

For example, "age" is an attribute in the relation "person". The possible values of "age" can be defined as the set of non-negative integers.

A functional dependency is a statement concerning the mapping between the domains of the attributes, not the set of attributes themselves.

So, if I have a "person" relation with a finite number of tuples, then I cannot possibly have all possible non-negative integers. But yet, we still do have a functional dependency from the ID of the person to the person's age.

-- -kiraReceived on Tue Jan 15 2008 - 18:56:19 CET