For example, from the Store object type we run down functional chains to the leaf
object types CityName and Region, gathering all the fact types on the way to group
them into a single table based on the identifier for Store.
A functional chain stops if it runs into a key object type (or a leaf or a nonfunctional
predicate). For example, starting at LineItem we gather up all its functional
fact types, as well as those for Invoice, but we cannot proceed past Date, Store, or
Item, since these are key object types. This leads to the Sale table in Figure 16.3.
The denormalized Sale and Star tables contain embedded functional dependencies
(e.g., stateCode