An
attribute
describes information about an entity that must be captured. Each
entity has zero or more attributes that describe it, and each
attribute describes exactly one entity. Each entity instance (row in
the table) has exactly one value, possibly
NULL
, for each of its attributes. An
attribute value can be numeric, a character string, a date, a time,
or some other basic data value type. In the first step of designing a
database, logical data modeling, we do not worry about how the
attributes will be stored.
NULL
provides the basis for dealing with missing
information. It is specifically used for cases in which you lack a
certain piece of information. As an example, consider a CD that does
not list the song lengths of each of its tracks. Each song has a
length, but you cannot tell from the case what that length is. You do
not want to store the length as zero, since that would be incorrect.
Instead, you store the length as NULL
. If you are
thinking you could store it as zero and use zero to mean
“unknown,” you are falling into one
of the same traps that led to one of the Y2K problems. Not only did
old systems store years as two digits, but they often gave a special
meaning to 9-9-99, assuming it was safe to do that in the expectation
that the system would be rewritten long before that date was ever
reached.
Our example database refers to a number of things: CD titles, band names, songs, and record labels. Which of these are entities and which are attributes?