# Re: NULLs: theoretical problems?

From: Brian Selzer <brian_at_selzer-software.com>
Date: Fri, 10 Aug 2007 11:56:05 GMT
Message-ID: <pnYui.44899\$Um6.1259_at_newssvr12.news.prodigy.net>

"Brian Selzer" <brian_at_selzer-software.com> wrote in message news:cfYui.44898\$Um6.30686_at_newssvr12.news.prodigy.net...
>
> "David Portas" <REMOVE_BEFORE_REPLYING_dportas_at_acm.org> wrote in message
> news:NM-dncYFOuhqBybb4p2dnAA_at_giganews.com...
>> "paul c" <toledobythesea_at_oohay.ac> wrote in message
>> news:JXLui.45171\$rX4.26997_at_pd7urf2no...
>>>
>>> (even though I'm not sure in "s{X} = t{X} implies s{Y} = t{Y}" whether
>>> "implies" stands for logical implication.)
>>>
>>
>>
>> Good catch. It seems that logical implication is not well defined for
>> three-value logic. According to Lex de Haan and Toon Koppelaars' recent
>> book:
>>
>> P | Q | P->Q
>> --------------
>> T | U | U
>> F | U | T
>> U | T | T
>> U | F | U
>> U | U | U or T?
>>
>> So possibly I have to modify what I said about no attribute with nulls
>> satsifying any FD. Although some dependencies may be satisfied it won't
>> be
>> enough for 2NF or anything higher because {K}->{N} is never true where K
>> is
>> a key and N is an attribute which has nulls.
>
> I would say instead that {K} --> {N} is indeterminate when N is an
> attribute that allows nulls, because just in case every tuple has a value
> for N, {K} --> {N} holds.
>
> If a schema is in 5NF whenever every applicable value is present, then
> null can have one and only one interpretation: an applicable value is not
> present. What you have then is an incomplete relation: an irregular set
> of tuples. For example, a predicate P(a, b, c) for a relation R{A, B, C}
> where A is the key is equivalent to:
>
> (a in dom(A)) /\ (b in dom(B)) /\ (c in dom(C)) /\ p
> where p is a conjunction of the constraints for R.
>
> Suppose that dom(C) = {1, 2, 3}, then an incomplete tuple,
>
> {a = 15, b = 23} represents something like
>
> (a = 15) /\ (b = 23) /\ (((c = 1) /\ ~(c = 2) /\ ~(c = 3)) \/
> (~(c = 1) /\ (c = 2) /\ ~(c = 3)) \/
> (~(c = 1) /\ ~(c = 2) /\ (c = 3))) /\ p
>
> Note that c in dom(C) is equivalent to
> ((c = 1) /\ ~(c = 2) /\ ~(c = 3)) \/
> (~(c = 1) /\ (c = 2) /\ ~(c = 3)) \/
> (~(c = 1) /\ ~(c = 2) /\ (c = 3)).
>
> I would argue, therefore, that the FD A --> C holds, even if C allows
> nulls.

Correction: I would argue, therefore, that the FD A --> C is true, even if C allows nulls.

> Can't an FD X --> Y be expressed this way:
>
> exists x exists! y (x in dom(X)) /\ (y in dom(Y))
>
> where exists! is a quantifier that means "there is one and only one?" And
> doesn't
> ((c = 1) /\ ~(c = 2) /\ ~(c = 3)) \/
> (~(c = 1) /\ (c = 2) /\ ~(c = 3)) \/
> (~(c = 1) /\ ~(c = 2) /\ (c = 3))
> mean that C has at most one value?
>
>>
>> The fact that attributes with nulls don't satisfy join dependencies
>> remains very solid and much more obvious.
>>
>> --
>> David Portas
>>
>>
>>
>
>
Received on Fri Aug 10 2007 - 13:56:05 CEST

Original text of this message