![]() | |
#1
| |||
| |||
|
#2
| |||
| |||
|
|
Some months ago Bob B took me to task for language that might have been too loose or even glib, referring to predicates and expressions. That was fair enough. Though I could've made it clearer that by expressions I meant relational algebra expressions, I still don't have clear answers to all of his complaint. One reason is that I still don't know how Codd's Information Principle applies to compound propositions, eg., " 'C1' is a customer OR 'C1' is a client". I can see that humans might imagine themselves capable of interpreting a relation (or to put it redundantly a relation value) as implitly mentioning that 'OR' connective (and dba's might so instruct their users). But where is it recorded? (or 'manifested'?) Eg., is it 'recorded' only in the ephemeral form of an expectation that a program's execution can't manifest given a single relation to operate on? |
|
As far as I can tell, there is no way to record a logical connective in a tuple, therefore not for a tuple and therefore not in a relational value (other than in a disconnected text mode thath isn't amenable to the algebra) which has always made me suspect that Codd's R-tables don't store compound propositions. If so, that would be one difference between internal and external predicates, which would make me suspect that we can't always expect the same results when the same algebra is applied to both. |
|
(I realize that Codd and others - maybe Ullman, I forget - showed that FOL and his relational algebra were equivalent, but I presume the conditions of that were with reference to his R-tables and not that FOL always gives the same results under all conditions.) |
#3
| |||
| |||
|
|
What is the predicate of Customer[id] join Client[id] where [] signifies project? ... |
|
... |
#4
| |||
| |||
|
|
Bob Badour wrote: ... What is the predicate of Customer[id] join Client[id] where [] signifies project? ... If you mean what is the 'external' predicate, I can't say, |
|
not knowing its purpose any more than a dbms designer can predict the exact purpose some unknown db is used for, other than to say intersection and quantification are involved. If you mean 'internal', that which an algebra operates with, it is basically the expression 'Customer[id] join Client[id]', standing for the intersection of the set of Customer id's that match Client id's and vice-versa. |
|
If the expression defined a view, what might you call it? ... You might call it a predicate that's satisfied by certain compound propositions. I think you might call it that even if it is 'satisfied' by tuples of a 'base' 'relvar'. I don't see that an expression being a view definition makes it stand for some different kind of predicate, if that's what you're driving at. |
#5
| |||
| |||
|
|
paul c wrote: Bob Badour wrote: .... not knowing its purpose any more than a dbms designer can predict the exact purpose some unknown db is used for, other than to say intersection and quantification are involved. If you mean 'internal', that which an algebra operates with, it is basically the expression 'Customer[id] join Client[id]', standing for the intersection of the set of Customer id's that match Client id's and vice-versa. Actually, for join it is "'id' is a customer and a client". For union, it would be "'id' is a customer or a client". ... |
#6
| |||
| |||
|
|
Bob Badour wrote: paul c wrote: Bob Badour wrote: ... not knowing its purpose any more than a dbms designer can predict the exact purpose some unknown db is used for, other than to say intersection and quantification are involved. If you mean 'internal', that which an algebra operates with, it is basically the expression 'Customer[id] join Client[id]', standing for the intersection of the set of Customer id's that match Client id's and vice-versa. Actually, for join it is "'id' is a customer and a client". For union, it would be "'id' is a customer or a client". ... Thanks. The nuance I'm detecting here is that there is some useful reason for phrasing an internal predicate in English rather than the more formal algebra. |
|
Am pondering the significance of the other comments. |
#7
| |||
| |||
|
|
paul c wrote: Bob Badour wrote: ... What is the predicate of Customer[id] join Client[id] where [] signifies project? ... If you mean what is the 'external' predicate, I can't say, No, I meant the internal predicate but I screwed up in any case. I meant to use union not join. Sadly, you removed all reference to the original context. ... |
#8
| |||
| |||
|
|
Bob Badour wrote: paul c wrote: Bob Badour wrote: ... What is the predicate of Customer[id] join Client[id] where [] signifies project? ... If you mean what is the 'external' predicate, I can't say, No, I meant the internal predicate but I screwed up in any case. I meant to use union not join. Sadly, you removed all reference to the original context. ... Wasn't trying to obscure any context, the predicate I started with was " 'C1' is a customer OR 'C1' is a client". |
#9
| |||
| |||
|
|
One reason is that I still don't know how Codd's Information Principle applies to compound propositions, eg., " 'C1' is a customer OR 'C1' is a client". I can see that humans might imagine themselves capable of interpreting a relation (or to put it redundantly a relation value) as implitly mentioning that 'OR' connective (and dba's might so instruct their users). But where is it recorded? (or 'manifested'?) Eg., is it 'recorded' only in the ephemeral form of an expectation that a program's execution can't manifest given a single relation to operate on? |
#10
| |||
| |||
|
|
One reason is that I still don't know how Codd's Information Principle applies to compound propositions, eg., " 'C1' is a customer OR 'C1' is a client". *I can see that humans might imagine themselves capable of interpreting a relation (or to put it redundantly a relation value) as implitly mentioning that 'OR' connective (and dba's might so instruct their users). *But where is it recorded? *(or 'manifested'?) *Eg., is it 'recorded' only in the ephemeral form of an expectation that a program's execution can't manifest given a single relation to operate on? |
![]() |
| Thread Tools | |
| Display Modes | |
| |