Many simple predicates

The most natural way to apply the RM is to use many simple predicates.

Consider these predicates about humans (we avoid a more realistic but esoteric business domain here, because that would be a distraction from the general point being made):

    father(F,C) :- F is the father of C
    mother(M,C) :- M is the mother of C
    married(A,B,D) :- A and B were married on date D
    born(P,H,D) :- P was born on date D in hospital H
    died(P,D) :- P died on date D
    loves(A,B) :- A loves B
    hates(A,B) :- A hates B
    employs(P,C) :- P employs C
    (etc)

Each relation records the extension of a simple, easy to understand predicate about the world.

This tends to avoid the need for nullable attributes, which is a good thing because instantiating a predicate to give a proposition, by substituting NULL for one of its parameters, doesn't give a meaninful proposition.

Note that it's possible for an RDBMS to allow high performance when using large numbers of simple predicates, by using denormalised representations.

Mapping onto OO classes

Mapping the information recorded in relations to OO classes is the ORM anti-pattern.

How would the information contained in hundreds of predicates about humans be mapped to OO classes?

Trying to record all this information using a class hierarchy is extremely cumbersome, particularly as it suggests a need for multiple inheritance and in any case doesn't fit well with the fact that usually in OO languages objects cannot change their type over time.