Re: Principle of Orthogonal Design

From: Brian Selzer <brian_at_selzer-software.com>
Date: Thu, 7 Feb 2008 07:41:01 -0500
Message-ID: <x%Cqj.7685$Rg1.2480_at_nlpi068.nbdc.sbc.com>


"Brian Selzer" <brian_at_selzer-software.com> wrote in message news:bRBqj.7684$Rg1.5758_at_nlpi068.nbdc.sbc.com...
>
> "Marshall" <marshall.spight_at_gmail.com> wrote in message
> news:108e169d-a906-4818-a83f-42c1e11a85d1_at_1g2000hsl.googlegroups.com...
>> On Feb 5, 1:54 pm, Jan Hidders <hidd..._at_gmail.com> wrote:
>>> On 5 feb, 22:06, Marshall <marshall.spi..._at_gmail.com> wrote:
>>>
>>> > However, suppose we have a binary predicate P over
>>> > domain X and we want to assert it is reflexive? In predicate
>>> > logic we can use the same name twice and express this
>>> > very conveniently:
>>>
>>> > Ax in X: P(x,x)
>>>
>>> > How would we do this if P's attributes were already bound
>>> > to the names "x" and "y"?
>>>
>>> Roughly the same, except you indicate the role in the predicate with
>>> the attribute names. So assume that attribute names are 'a' and 'b':
>>>
>>> Ax in X: P(a=x,b=x)
>>
>> I see. Okay, this is a very small change indeed. Basically we
>> are just specifying attributes using the same syntax as is
>> used in named-argument function invocation, in languages
>> that support that feature. This still relies on using the
>> quantifiers to introduce new names. And the attribute
>> names of different relations are always insulated from
>> each other: a relation may be in the scope of a quantifier,
>> but it is never in the scope of another relation.
>>
>> This seems like it will work as a logical language (where
>> the results are always boolean) but I don't see how it
>> could work in a query language, because it doesn't
>> specify/unify the attribute names of the result relation.
>>
>> An example:
>>
>> Suppose we have
>> P(a, b)
>> Q(a, b)
>> as subsets of X*X
>>
>> and we want to join P and Q on P.b = Q.a.
>>
>> Ax in X: Ey in X: Ez in X: P(a=y, b=x) & Q(a=x, b=z)
>>
>> I guess I should go read about the tuple relational calculus
>> and see what it does...
>>
>>
>> Marshall
>>
>>
>>
>
> I'm confused, Marshall. Isn't
>
> Ex Ey x in X /\ y in X /\ (P(a=x,b=y) \/ Q(a=x,b=y))
>
> the extension of the database containing P and Q? And isn't
>
> Ex Ey x in X /\ y in X /\ (P(a=x,b=y) /\ Q(a=x,b=y))
>
> the natural join of P and Q? So wouldn't
>
> Ex Ey x in X /\ y in X /\ (P(a=x,b=y) /\ Q(a=y,b=x))
>
> be the join of P and Q on P.b = Q.a?
>
> Why should the extra quantifier be needed? And why should it be
> universal? A join is not a constraint, is it?
>

Sorry, I answered my own question. Received on Thu Feb 07 2008 - 13:41:01 CET

Original text of this message