On Mon, Sep 15, 2003 at 09:53:11PM -0400, Bruce Feist wrote:
> Bob Hall wrote:
> 
> >The meaning of NULL is defined in the SQL specification; it means 
> >"not known" or "not applicable". 
> >
> Which is just about as useful as not defining it, actually.  The 

That's not true. Having a univerally understood designation for 
"not known" or "not applicable" is extremely useful. It would have 
been better if the original SQL committee had specified a designation 
for each, but even the combined designation is useful.

> vagueness is the cause of a great many program bugs when database 
> designers don't specify what NULL means for a given field.  To give a 
> hypothetical example:

This is a really bad example.
 
> The application is payroll/personnel.  A programmer is tasked with 
> creating forms for data entry on new employees, including supervisor.  
> If the user doesn't enter a new employee's supervisor, the application 
> accepts it, figuring that it is not yet known, and stores NULL for the 
> field ("not known" use of NULL).

I've worked with payroll databases. Usually, the business rules 
forbid putting the employee into the database if certain data is 
missing. The employee literally doesn't get a paycheck until this data 
has been supplied. In other cases, new employees go into a preliminary 
table until the missing information is supplied. 
 
> Meanwhile, a payroll programmer has been tasked with writing an 
> application to give the CEO a huge bonus and stock options.  To figure 
> out which employee is the CEO, the application looks for the employee 
> with NULL for supervisor ("not applicable" use of NULL).

This database would be impossible to maintain if the company were more 
than a few hundred employees. A better solution is to assign the employee 
to a section and assign a supervisor to the section. That way, you don't 
have to change each employee's record each time the supervisor changes.
 
> Suddenly, a large number of new hires are fabulously wealthy.  Who 
> screwed up?  Answer: the DB designer who didn't specify what NULL meant.

The meaning of NULL is already specified. The fault lies in the 
design of the database, not the definition of NULL. If the database 
were designed this way, then the people updating it would have to 
take responsibility for ensuring that a change that applied to only 
one person wasn't accidentally applied to someone else. Which makes it 
even clearer that the database is badly designed.
 
> >A zero-length string has no defined meaning. I've done maintenance on 
> >databases that contained zero-length strings, and they were nightmares.
> >I can't think of any reason why you would use a zero-length string in 
> >a database.
> > 
> >
> Because you know that a given person has no middle name?
> To represent "no value", as differentiated from "not known"?

If a person has no middle name, then the middle name field is "not
applicable", i.e. NULL. If an attribute is known to have no value, 
then you can't apply it to the entity.

Bob Hall

-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to