Types of Decomposition
Relations can be decomposed in one of two ways: horizontally or vertically.
A horizontal decomposition is one in which a relation is partitioned along its cardinality dimension. In other words, entire tuples are divided into two or more tuple sets. Conceptually, this is pure relational restriction without projection, as indicated by the following graphic:
A vertical decomposition is one in which a relation is partitioned along its arity dimension. In other words, the attributes of a relation are decomposed into two or more sets of projections.
Conceptually, this is pure relational projection without restriction, as indicated by the following graphic:
Notice that the vertical decomposition in this example is not a simple splitting of attributes between relvars (see “Relations, Relation Values, and Relation Variables” on page 627), but an actual normalization step (to BCNF), so the SuppNum attribute is duplicated, once as a PK in Supplier and again as an FK in Parts.
A more pure example of vertical composition is the projection of a subset of the columns of a large table into a single‑table join index (see “Single‑Table Join Indexes” on page 546).
For more information about decomposing relations, see “Decomposing Relations” on page 89.