Re: Constraints and Functional Dependencies

From: Marshall <marshall.spight_at_gmail.com>
Date: 25 Feb 2007 20:09:07 -0800
Message-ID: <1172462947.659546.310310_at_v33g2000cwv.googlegroups.com>


On Feb 25, 9:40 am, mAsterdam <mAster..._at_vrijdag.org> wrote:
>
> Of course. But then several subthreads (contributions by paul c,
> Cimode and Marshall) would be irrelevant. I am sure Marshall
> would have had the courtesy to point that out.

Um, I want to point out that I'm having trouble keeping up with the bandwidth of posts on this thread. I want to respond to as much as I can but I'm falling behind!

> > If S(b) is actually a shorthand notation for
> > S(b,b0...bn) then one can express that b is a ck by:
>
> > forall b: exists c0,...cn: forall b0...bn:
> > S(b,b0...bn): b0 = c0 ... bn = cn
>
> > Correct?
>
> In Marshall's notation that would be
> (1) {b} -> {b0,...bn} =def=
> (2) forall S(b, b0,...bn): forall S(b, b0'...bn'):
> (3) b=b' => b0 = b0' ... bn = bn'
>
> I think.

Yes. (Where the minterms to the left of the => in the third line are connected by "and".) Note that for this to be a key definition {b, b0, ... bn} must be every attribute of S.

This is not the case for the definition of referential integrity I posted earlier, in which attribute a of R is restricted to values of attribute b of S

  forall R(a): exists S(b): a = b

In this case, both R and S may have additional attributes; all we're saying is that R projected over a is a subset of S projected over b.

Of the three lines I quoted above, line (1) is just the standard notation for functional dependencies as best I understand it. The "=def=" is also a fairly standard shorthand for "is defined to be equal to." In other words, what I was doing was *defining* how a functional dependency would be encoded into a relvar-range-restricted FOL constraint. Lines (2) and (3) are the constraint itself; only these would be passed to the system.

> Note that for instance "exists c0,...cn:" simply disappears,
> because of
>
> > We can use the existing attribute
> > names as the names of the logic variables.
>
> , a chosen ambiguity I already pointed out:
> P(a) denotes both 'P has an attribute a' as well as a value for a.
>
> This is just how I understood it.
> To be sure you shouldn't ask me.

Hope this makes things a bit clearer.

Marshall Received on Mon Feb 26 2007 - 05:09:07 CET

Original text of this message