From this point forward I’ll favor the term *type* over the term *domain*. So what is a type, exactly? In essence, it’s *a named, finite set of values*—all possible values of some specific kind: for example, all possible integers, or all possible character strings, or all possible supplier numbers, or all possible XML documents, or all possible relations with a certain heading (and so on). To elaborate briefly:

The types we’re interested in are always

*finite*because we’re dealing with computers, which (as pointed out in connection with type RATIONAL earlier in the chapter) are finite by definition.Note also that qualifier

*named:*Types with different names are different types.

Moreover:

Every

*value*is of some type—in fact, exactly one type, except possibly if type inheritance is supported, a concept that’s beyond the scope of this book.*Note:*Since no value is of more than one type, it follows that types are disjoint (nonoverlapping), by definition. However, perhaps I need to elaborate on this point briefly. As one reviewer of this chapter said, surely types*WarmBloodedAnimal*and*FourLeggedAnimal*overlap? Indeed they do; but what I’m saying is that if types overlap, then for a variety of reasons we’re getting into the realm of type inheritance—in fact, into the realm of what’s called*multiple*inheritance. Since those reasons, and indeed the whole topic of inheritance, are independent of the context we’re in, be it relational or something else, I’m not going to discuss them ...

Start Free Trial

No credit card required