The Forum for Discussion about The Third Manifesto and Related Matters

Please or Register to create posts and topics.

'Auxiliary relvar' by any other name? [was: Specialisation-by-Constraint for arithmetic operations]

Quote from Dave Voorhis on June 13, 2020, 10:34 am
Quote from AntC on June 13, 2020, 5:59 am

[...]

Much of the OOP argument for what they call 'inheritance' is Specialisation-by-Extension/structural sub-typing; for which TTM has a ready answer: auxiliary relvars.

What are auxiliary relvars?

I just searched for "auxiliary" in DTATRM and DBE, and found only one (completely unrelated) instance of the word in DBE.

[from my reply:]

What DBE Ch 23/The Decomposition Approach to 'Missing Information' arrives at by Vertical Decomposition/6NF. A toll bridge is a bridge that charges a toll; there's a base relvar holding bridge details (for all varieties of bridges); there's an auxiliary relvar that holds toll details, just for toll bridges. A Manager is an employee who manages a department; there's an employee relvar; there's an auxiliary relvar for managers identifying the department; if an EmployeeId appears in the employee relvar but not the manages-department auxiliary relvar, that is a non-manager employee.

More technically, an auxiliary relvar R2 has a key same as the based-on relvar R1 and an Inclusion Dependency from R2 to R1. So the cardinality of R2 :: R1  is zero-or-one :: one.

Contrast a Foreign Key constraint is a non-key attribute of the referring relvar Inclusion Dependency to the key of the referred-to. So cardinality referring :: referred is zero-to-many :: one.

The auxiliary-of dependency is transitive: if R3 is auxiliary of R2 and R2 of R1 then R3 is auxiliary of R1. (Dave's message gave ColumnarReport auxiliary of SectionedReport auxiliary of Report.)

I though I'd seen 'auxiliary' used in that sense round here (but of course I can't find it). If not, is there some other term?

It comes up in 6NF and 'Missing Information' as: If CITY might be non-applicable for some Products (because they're virtual/delivered electronically/not stored), partition CITY away from relvar P, put {P#, CITY} in an auxiliary relvar, key {P#} refers to P# FROM P.