Re: Constraints and Functional Dependencies

From: mAsterdam <mAsterdam_at_vrijdag.org>
Date: Sun, 25 Feb 2007 17:15:17 +0100
Message-ID: <45e1b5a3$0$327$e4fe514c_at_news.xs4all.nl>


paul c wrote:
> mAsterdam wrote:

>> ...
>> A rephrase to (i) could be:
>>
>> <reference>
>> (i a)
>>     A relation R with attribute a (written as R(a)) having
>>     a as a reference into S(b)
>>     is expressed as follows:
>>
>>         forall R(a): exists S(b): a = b
>>
>>         Note that b need not be a ck to S, hence 'into', not 'to'.
>> </reference>
>>
>>
>> But what exactly is the reference referencing?

>
> I'm sure there is a term for that kind of English phrasing. For myself,
> the phrase "reference referencing" seems unnecessarily ornamental.

Ornamental? I am a non-native speaker of English - maybe a native speaker (you are, aren't you?) can put into less words than this what I mean with it.

How would you say: "The stuff referenced is not a tuple in S, but a subset of S".

> In ordinary English, one relation references another.

One relation may reference several others. What do you call the individual referencing attribute sets? What do you call the stuff being referenced?

> In ordinary RA, which an engine would likely use,
> the projection of R on "a" joined with
> the projection of S on "b" (renamed to "a") gives a relation that is
> equal to (ie., the same relation as) the projection of R on "a".
>

>> A set of S-tuples, not just one.

>
> Yes, relational algebra/calculus operate on sets. Tuples are devices
> that explain, eg., help define, operations and help mechanize them.
>
> If an engine knows that it is only required to determine the truth of a
> constraint, rather than being required to materialize a join, it might
> optimize by stopping after one tuple appears in the join. That's
> neither here nor there as far as the definition is concerned.
>
>> That makes it a sort of hand_wave instead of a reference, right?

>
> No.
>
>>
>> Is there something I am missing? Should we go with:
>>
>> <handwave>
>> (i a)
>>     A relation R with attribute a (written as R(a)) having
>>     a as a handwave into S(b)
>>     is expressed as follows:
>>
>>         forall R(a): exists S(b): a = b
>>
>>         Note that b need not be a ck to S, hence 'into', not 'to'.
>> </handwave>
>>
>> and have the 'reference' denote the special case where b /is/ ck to S?

>
> Given that Marshall provided his precise definition,

... which had an admitted flaw in the definiendum which I am trying to iron out with a rephrase suggestion. What is your current reading of the definition? What does it define?

> there is no handwave.

> The fact that b might be a candidate key pertains to S and
> not the reference.

Accepting this term just for this second, definitely. The constraint defined in (i) only restricts attribute a of R (to b values present in S).

> Coining a special case makes sense only when it solves some problem.
> I've been hunting for that problem for years and
> haven't found it yet.

I like this property: If b is a ck of S, every R-tuple has an associated S-tuple - but admit to having no particular problem, solved by restricting b to a ck of S.

> The more interesting question for me is "why did Codd mandate this?".
> Perhaps he didn't want to muddy things when his original audience
> included politically-powerful simpletons and not-invented-here bigots.
Received on Sun Feb 25 2007 - 17:15:17 CET

Original text of this message