What does this NULL mean?

From: Eric Junkermann <eric_at_deptj.demon.co.uk>
Date: Sat, 10 Dec 2005 21:32:30 +0000
Message-ID: <mG8LO6Gul0mDFwjR_at_deptj.demon.co.uk>



The number of long threads about NULLs indicates that they are a source of difficulty and disagreement.

I have been prompted to start yet another by the www.dbdebunk.com quote of the week for December 10, 2005 . It says

"There have been, there are, and there
always will be NULLS in the real world."

and is attributed to "Pete Brown, dbmonster.com", but it is from a comp.databases.theory thread "Does Codd's view of a relational database differ from that of Date & Darwin?" on June 4, 2005 .

At the time, I followed up with a request for a definition and examples, but I never pursued the answer I got (which I thought less than satisfactory). My favourite bit out of the rest of the thread was from Ged Byrne, who said

... If my Manager points to a NULL in a report, I don't say 'That is a NULL.' I say something like 'That customer is retired, and does not have a work address' or 'The user left that field blank.' That is if I am familiar with the data. If I am unfamiliar then the NULL tells me nothing, I can only shrug my shoulders and say 'Sorry, I don't know.' ...

Finally, this leads to where I want to be with this post:

A NULL does not actually provide enough information to interpret it properly, additional knowledge is required.

The best way to look at a NULL is as a sort of denormalisation. If we have a table X {A, B, C} where A is the key, B is a column we are not currently interested in, and C is the column which is NULL in at least one row, then we are really talking about two tables X1 {A, B} and Y {A, C}, where at least one row in X1 does not have a corresponding row in Y.

(This is like vertical decomposition in http://web.onetel.com/~hughdarwen/TheThirdManifesto/Missing-info-without- nulls.pdf)

All this situation is telling us is that there is no C value in the database for this value of A. It does not matter how many possible reasons there are for the existence of this situation (the unsatisfactory answer I referred to above), we do not know why there is no value. Actually presenting lots of possible reasons was a very bad argument because only if there was exactly one reason would we know what was going on.

There is no such thing as an acceptable implementation of NULL, because each occurrence of a potential NULL in a database design may have many possible reasons, each of which must be represented in the database somehow. There is no guarantee that there is a single form of representation for each of the reasons, and hence no general way of implementing a NULL.

So in most cases, the meaning of NULL is "This database has no value here, the design must be incomplete"


-- 
Eric Junkermann
Received on Sat Dec 10 2005 - 22:32:30 CET

Original text of this message