125 6NF

Sixth Normal Form, or 6NF, is defined in terms of join dependencies. A relvar is in 6NF if and only if every join dependency it satisfies is trivial. A join dependency is trivial when one of its components is the entire heading of the relvar. Equivalently, a 6NF relvar cannot be nonloss decomposed into smaller projections.

Informally, 6NF decomposes relations into irreducible facts. In the common case of a relvar with a key and several non-key attributes, this produces one relvar for each non-key fact, with each relvar recording the key together with one non-key attribute. This familiar shape is a consequence of the join-dependency definition, not the definition of 6NF itself.

Example of 6NF decomposition

The following relation records several facts about suppliers:

Supplier
S1,Smith,20,London S2,Jones,10,Paris S3,Blake,30,Paris

A 6NF decomposition separates those facts into one relation per non-key attribute:

SupplierName
S1,Smith S2,Jones S3,Blake
SupplierStatus
S1,20 S2,10 S3,30
SupplierCity
S1,London S2,Paris S3,Paris

This is close in spirit to Predica's representation of attributes as unary predicates. The Predica schema keeps the facts grouped under the domain they describe, while the denotation into logic still has one unary predicate for each attribute:


entity Supplier
{
    String id;
    String name;
    Integer status;
    String city;

    key {id};
}

Predica is therefore not merely the RM written in 6NF. It has entity, value, enum, variant, quotient, and structural types; attributes may have cardinality; and path expressions navigate between domains. But the 6NF instinct is useful: facts should be decomposed until each one has a clear subject and a clear attribute.