Patience is a virtue.
Site under construction.
Older posts have been reconstructed from posts to the TTM mailing list, with some minor edits.
Patience is a virtue.
Site under construction.
Older posts have been reconstructed from posts to the TTM mailing list, with some minor edits.
Filed under General
Here is the algorithm for ‘SUPERJOIN’, which generates the question about ‘how many possible binary operators’:
Attribs a3={} For a1 in r1.attribs If L and a1 not in rel2.attribs then a3 += a1 If C and a1 in rel2.attribs then a3 += a1 For a2 in r2.attribs If R and a2 not in rel1.attribs then a3 += a2 Tuple t3(a3)={} For t1 in r1.tuples For t2 in r2.tuples If T and t1 not match t2 then t3 += t1 If M and t1 match t2 then t3 += t1 + t2 // <<-- see note If B and t1 not match t2 then t3 += t2 Relation r3(a3,t3)
These are set operations, so duplicate attributes and tuples are discarded. The final result is r3 with heading a3. The operation ‘+’ is taken to mean a new tuple that is the union of its arguments. It occurs to me that a different operation could be substituted at this point, with different outcomes.
The above generates the results in this table:
L | C | R | LC | CR | LR | LCR | |
T | ✓ | ✓ | ✓ | ||||
M | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
B | ✓ | ✓ | ✓ | ||||
TM | ✓ | ✓ | ✓ | ||||
TB | ✓ | ||||||
MB | ✓ | ✓ | ✓ | ||||
TMB | ✓ |
Every tick is a unique outcome. Blanks are either OUTER joins or empty. The question is: which if any well-known binary (dyadic) algebraic operations on relations cannot be generated by this algorithm?
Filed under General