R1158 - modelint/shlaer-mellor-metamodel GitHub Wiki

R1158 / 1:1c

Relational Action outputs exactly one Table Flow

Table Flow is yielded by zero or one Relational Action


By definition, a Relational Action must output a relation in the form of a Relation Flow. It is this property that establishes closure within relational algebra. It ensures that Relational Actions may be nested.

We have no certainty (at model time) that a single tuple will always be the output of any given Relational Action. So the Relation Flow output must be a Table Flow. Even the output of a Restrict Action limited to a 1 cardinality may yet yield an empty relation and thus, not a tuple.

Within an Activity, all new Table Flows must be created by some Relational Action. But any inputs to that Activity may also be Table Flows generated externally. The action instantiating those flows will be opaque to the Activity and thus not be seen as a Relational Action Output.

Also imagine the case, where a Method, External Entity's Operation, or Type's operation is invoked which yields a relational output. Again, the source of that Table Flow input will be opaque to whichever Activity invoked that Method or operation.