What does this NULL mean?



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
.



Relevant Pages

  • Re: Form quit, bypasses cancel in textboxes BeforUpdate
    ... Just about every pc database product. ... would love to find that shortcut, and the instant pain killer. ... >> have to resort to using the forms before update event). ... there is lots of reasons for the above: ...
    (microsoft.public.access.formscoding)
  • Re: 3vl 2vl and NULL
    ... >> number of NULLs to denote the various reasons why data can be missing. ... You, like any database, have only the values. ... >> fact at all for Uncle Vernon in the fact table for a person's age. ... >- My family member Aunt Marge has an age of 47 years. ...
    (comp.databases.theory)
  • Re: Error Message: Two few parameters, Expected 2
    ... reasons the records are not saving properly to the database. ... Here the sql statement is referencing the form for the susgrant ... >> Dim rst As Recordset ...
    (microsoft.public.access.modulesdaovba)
  • Re: Image Question
    ... > the database though... ... the advantages might be for storing them in the database. ... > somewhere on the server that had its record deleted). ... You gave "reasons" and so many times people just ...
    (microsoft.public.dotnet.languages.vb)
  • Re: Problems with querying date field
    ... There are important differences between a file system and a database, ... A file is usually associated with a particular language -- ever try to ... the internal SQL datatypes are converted into host language ... clock representation), but TIMESTAMP is a string of digits in DB2 (Cobol ...
    (microsoft.public.sqlserver.programming)