Part I / Preliminaries Chapter 1 / Background and Overview
Copyright © 2014 C. J. Date and Hugh Darwen 9
proscriptions into RM and OO categories. The various prescriptions and proscriptions are itemized and
discussed in detail in Parts II and III of this book.
In addition to the prescriptions and proscriptions just mentioned, the Manifesto includes a series
of Very Strong Suggestions, likewise divided into RM and OO categories; again, see Parts II and III.
Also, Part IV contains the definition of a model of type inheritance, and that model is likewise
formulated as a series of prescriptions—Inheritance Model Prescriptions (IM Prescriptions). Please
note, however, that almost everything to do with that inheritance model is ignored prior to Part IV,
except for the occasional remark here and there. The material of Part IV extends, but does not
invalidate, the material presented in earlier parts of the book.
For definiteness, we assume throughout the Manifesto and throughout this book that the language
D is imperative in style. Like all such languages, therefore, it is based on the four core concepts type,
value, variable, and operator.
1
For example, we might have a type called INTEGER; the integer 3
might be a value of that type; N might be a variable of that type, whose value at any given time is some
integer value (i.e., some value of that type); and plus might be an operator that applies to integer values
(i.e., to values of that type). See the section “Some Crucial Logical Differences” later in this chapter
for further elaboration of these concepts.
As an aside, we remark that if it is true that the Manifesto can be regarded as defining a
foundation for database technology, then the concepts of type, value, variable, and operator can be
regarded as providing a foundation for that foundation. And since the value, variable, and operator
concepts in turn all rely on the type concept, we might go further and say the type concept can be
regarded as a foundation for the foundation for the foundation ... In other words, the type concept is the
most fundamental of all, as we will soon see.
Back to the language D. We have said that D is imperative in style (or so we will assume). Now,
some writers equate the term imperative with the term procedural, but we do not (even though they
both refer to a style of programming in which the programmer explicitly directs the computer to carry
out certain processes). Actually, neither term is very precisely defined; however, procedural usually
connotes a rather low level of abstraction, while imperative does not (at least, not necessarily). In other
words, procedural languages are imperative, but imperative languages are not necessarily procedural.
In particular, the language D—or its relational portion, at any rate—is at a comparatively high level of
abstraction and is thus imperative but not procedural.
One last point to close this section: Do not infer from our assumption of an imperative style that
we discount the possibility of (e.g.) a functional style; at the time of writing, however, we have not
investigated such a possibility in any depth. But we should point out that certain of the prescriptions,
proscriptions, and suggestions spelled out in this book would have to be reformulated in the context of a
functional D. For example, a functional D would obviously have no need of variables at all, in the
usual programming sense of that term, and hence would not need any update operators either.
1
Note that we distinguish between operators and operations—an operation is the process carried out when an operator is
invoked. That said, however, we should say too that the terms can often be used interchangeably. For example, no real
harm is done if we replace “operator” by “operation” in the sentence “Plus is an operator that takes two integers as input and
returns another integer as output.”