Re: NULLs: theoretical problems?
Date: Fri, 10 Aug 2007 11:47:20 GMT
Message-ID: <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.
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:47:20 CEST