Their are very important business critical reasons for incorporating NULL as valid datum in a database. Take for instance an insurace company. An operator is inputting an application. As entry progresses, it is discovered that near the end of the application, information is missing or wrong. Lets look at the business implications of each alternative.

1. All fields must be NOT NULL - Since the required datum is not available the operator can put everything on hold to contact the agent to get the required datum. In the mean time, no other work can be accomplished until the datum is acquired. Hold time on personnel is money, driving up the cost of doing business. Alternatively, the operator can cancel the input, call the agent, and set aside the application until the agent calls back. When the datum is acquired, the application can be input. The time to input the application just doubled...more costs. The third is to force the field to be a value that is NOT NULL but not valid either. This leads to the retension of non-truth in the system which must be validated at some point before the data can be used upstream in the business process. If a the value is poorly chosen, then the upstream process may not detect the erroneous datum and process it anyway. Now even more costly to correct from a business standpoint.

2. Fields may be NULL. - In the above example, the operator can save the partial application and resume where they left off when the datum is obtained, minimizing input costs and allowing the business to be more competitive. When looking at the data, the data tells the truth, i.e. the datum is not known, not some arbitray or cleverly manipulate value. Down stream processing can be stopped easily because there is no value to work against, thus preventing ambiguous results that must be reversed at additional expense to the company. It has been stated by those that study this stuff, that if the cost of correcting an error is 1 if it is detected at the time it occurs, it will cost 10 if it is not detected until the end of the process. If the error gets to the end user, the cost of correction can approach 100. It is in business's competitive interest to prohibit mistakes from getting to the end user. Using poorly chosen values for fields that must be NOT NULL often lead to very costly errors to business.

Here is another example that I've seen. In an insurace company, the application input process required that all fields be NOT NULL. One of the fields that was populated was the policy #, which was generated from a sequence. The application could not be input because of missing or incorrect datum and the input was cancelled. The issued policy# was just lost without any trace in the system as to why. You are now called on by an auditor to explain why there are holes in the policy# sequence of issued policies. Guess what, the question cannot be adaquately defended and serious financial consequenses can follow.

Last example. There are business rules that are in effect for a period of time such as interest rates. To represent the valid time period the rules is in effect a start date and an end date are associated with the rule. If I choose to make the end date NOT NULL what date do I use when creating the record? If I put the date out to the limits of time for the system, then the rule does not represent truth because it ends at the date specified. If I use an epoc date, then the end date preceeds the start date which is also not true. The only valid end date is NULL, the rule is in effect until terminated.

In over 20 years of database design and application development, I have found that it is far better to leave fields that have unknown values NULL rather than populate them with invalid data and suffer the consequenses later, especially for auditing purposes. Only NULL tells the truth in the data...the datum is unknown. When bogus data is used to populate required fields, it will inevitably end up on a report that someone will misinterpret often to near catestrophic results for business.
.===================================.
| This has been a P.L.U.G. mailing. |
|      Don't Fear the Penguin.      |
|  IRC: #utah at irc.freenode.net   |
`==================================='

Reply via email to