Consider the design illustrated in Figure 15-6 (a slightly revised, somewhat “RM/T-like” version of Figure 14-4 from the previous chapter):
The predicates for these relvars are as follows:
EMP: Employee ENO is employed by the company.
EARNS: Employee ENO has salary SALARY.
SALARY_UNK: Employee ENO has a salary, but we don’t know what it is.
UNSALARIED: Employee ENO doesn’t have a salary.
I observe now that either relvar SALARY_UNK or relvar UNSALARIED is redundant—any employee represented in relvar EMP and not in relvar EARNS must be represented in exactly one of the other two; thus, we could eliminate, say, relvar SALARY_UNK without any loss of information. Yet there doesn’t seem to be any good reason for choosing either of SALARY_UNK and UNSALARIED over the other as the one to be eliminated, and considerations of symmetry would argue in favor of retaining both, and living with the redundancy (?).
Aside: Symmetry is usually another good design principle. To quote Polya:[162] “Try to treat symmetrically what is symmetrical, and do not destroy wantonly any natural symmetry.” But Example 8 and others like it—Example 7 too, perhaps—show that symmetry and nonredundancy can sometimes be conflicting objectives. End of aside.