![]() | |
![]() |
| | Thread Tools | Display Modes |
#11
| |||
| |||
|
|
On Feb 14, 2:38 pm, r... (AT) raampje (DOT) lan (Reinier Post) wrote: Keith H Duggar wrote: You think my proposal does not allow you to uniquely address header attributes? I think you need to try again, perhaps with less of a focus on "telling us" what sets and ordered pairs are. Perhaps it would help if you explain what a 'copied type' is I was hoping I could get away with just a loose intuitive notion for what it is ;-) If X is a typecopy of Y then X and Y are distinct types that are mutually coercible and whose extensions are equal. If need be we can go into much more detail. However, if possible I'd like to focus on what usefulness names add other than to handle attributes with the same type? For example, just for the sake of argument, pretend we are working in a universe where every attribute of a relation always has a unique type in that relation. Ie just pretend that there is never a case where we want to have two or more attributes in the same relation having the same type. Now, in this world do we gain anything any usefulness at all by having attribute names? |
|
and how 'copying types' is more convenient than ordering or naming different attributes with the same type. I don't know whether it necessarily more convenient but I do believe it simplifies the relational model. For one, it is often the case that one already has unique types and thus can already construct a header without the additional "attribute names". Second, requiring unique types and reducing the header to a simple set eliminates the need to define an additional uniqueness constraint across <name,type> pairs. |
#12
| |||
| |||
|
|
Of course the conventional definition of a relation's header is a set of ordered pairs of "attributes" of the form <A, T where A is the "name" of the attribute (which must be unique within the header) and T is a type. |
#13
| |||
| |||
|
|
On Feb 13, 12:53 pm, Keith H Duggar <dug... (AT) alum (DOT) mit.edu> wrote: Of course the conventional definition of a relation's header is a set of ordered pairs of "attributes" of the form <A, T where A is the "name" of the attribute (which must be unique within the header) and T is a type. ... |
|
The more I study relational model, the less I appreciate the concept of type (domain). This is consistent with dbms vendors failed to deliver genuine rdbms extensibility via user defined types: when did you last time program a new type? It looks like the only important operation on any domain is equality, and the other ones are just predicates in disguise. |
#14
| |||
| |||
|
|
The more I study relational model, the less I appreciate the concept of type (domain). This is consistent with dbms vendors failed to deliver genuine rdbms extensibility via user defined types: when did you last time program a new type? It looks like the only important operation on any domain is equality, and the other ones are just predicates in disguise. |
#15
| |||
| |||
|
|
I'm wondering, do we really need A? Can we not simplify this header notion to just a set of types? |
#16
| |||
| |||
|
|
Operators can be formalised without a type system too. *Simply formalise an operator as a function defined on some domain, where a domain is merely a set (not a "type"). |
#17
| |||
| |||
|
|
On Feb 17, 1:29 pm, David BL <davi... (AT) iinet (DOT) net.au> wrote: Operators can be formalised without a type system too. Simply formalise an operator as a function defined on some domain, where a domain is merely a set (not a "type"). Thanks for the introduction, I haven't seen the typeless model before. I don't see how such a system would handle arithmetic operators (e.g. + and <) and string operators like concatenation and search - could you perhaps give an example? |
#18
| |||
| |||
|
|
On Feb 17, 9:15 pm, Nilone <rea... (AT) gmail (DOT) com> wrote: On Feb 17, 1:29 pm, David BL <davi... (AT) iinet (DOT) net.au> wrote: Operators can be formalised without a type system too. *Simply formalise an operator as a function defined on some domain, where a domain is merely a set (not a "type"). Thanks for the introduction, I haven't seen the typeless model before. *I don't see how such a system would handle arithmetic operators (e.g. + and <) and string operators like concatenation and search - could you perhaps give an example? In a typeless system a unary function could for example be formalised as a triple (D,C,G) where D is the domain, C is the co-domain and G is the graph of the function (a subset of DxC). *This is typeless in the sense that a function value doesn't formally have any concept of a defined type. *Rather the domain and co-domain are formally part of the function's value as a triple (D,C,G). *For example two functions can have the same domain and graph but different co-domains. *That makes them distinct. *This is actually conventional, as when one determines whether a given function is surjective (i.e. its range equals its co-domain). *It wouldn't make sense to ask whether a function is surjective if its co-domain isn't part of its value. Alternatively a typeless system could instead formalise a unary function as a set of pairs (i.e. what we above called its graph). *In that case the domain and range is determined from the graph using projection, but there is no concept of a co-domain. Similarly a typeless system could formalise a relation in two different ways. *One allows for attributes to have domains specified independently of the graph (or "body") of the relation, and these domains represent part of the relation's value. *That means that two distinct relations can have exactly the same graph. Alternatively a relation can be identified with its graph. *In that case the domains are determined as the projection of each attribute. In a typeless formalism one is very clear about what it means for two functions or two relations to be equal. * It seems to require more effort to understand what equality means in a typed formalism. In a D&D type system, a value has a MST, but this actually depends on the prevailing type system. *E.g. two different databases could use different type systems. *Putting it another way, the MST of a value depends on who you ask :-). D&D want to ensure that equality of values is independent of declared types. *That's why they say that a selector for an ellipse value that happens to specify equal width and height actually returns a value which has an MST of circle. *It's like a "magic downcast". *They point out that OO systems don't normally work that way. *E.g. an OO constructor for ellipse never returns a circle. I think D&D end up treating relations with the same body and attribute names as equal. *i.e. in essence the declared attribute domains are not part of the relation's value. *I think they define subtyping of relation types accordingly. It seems to me that D&D spend a lot of effort discussing ideas that are either eliminated or trivialised in a typeless formalism of the RM. |
#19
| |||
| |||
|
|
On Feb 17, 10:14*am, David BL <davi... (AT) iinet (DOT) net.au> wrote: On Feb 17, 9:15 pm, Nilone <rea... (AT) gmail (DOT) com> wrote: On Feb 17, 1:29 pm, David BL <davi... (AT) iinet (DOT) net.au> wrote: Operators can be formalised without a type system too. *Simply formalise an operator as a function defined on some domain, where a domain is merely a set (not a "type"). Thanks for the introduction, I haven't seen the typeless model before. *I don't see how such a system would handle arithmetic operators (e.g. + and <) and string operators like concatenation and search - could you perhaps give an example? In a typeless system a unary function could for example be formalised as a triple (D,C,G) where D is the domain, C is the co-domain and G is the graph of the function (a subset of DxC). *This is typeless in the sense that a function value doesn't formally have any concept of a defined type. *Rather the domain and co-domain are formally part of the function's value as a triple (D,C,G). *For example two functions can have the same domain and graph but different co-domains. *That makes them distinct. *This is actually conventional, as when one determines whether a given function is surjective (i.e. its range equals its co-domain). *It wouldn't make sense to ask whether a function is surjective if its co-domain isn't part of its value. Alternatively a typeless system could instead formalise a unary function as a set of pairs (i.e. what we above called its graph). *In that case the domain and range is determined from the graph using projection, but there is no concept of a co-domain. Similarly a typeless system could formalise a relation in two different ways. *One allows for attributes to have domains specified independently of the graph (or "body") of the relation, and these domains represent part of the relation's value. *That means that two distinct relations can have exactly the same graph. Alternatively a relation can be identified with its graph. *In that case the domains are determined as the projection of each attribute. In a typeless formalism one is very clear about what it means for two functions or two relations to be equal. * It seems to require more effort to understand what equality means in a typed formalism. In a D&D type system, a value has a MST, but this actually depends on the prevailing type system. *E.g. two different databases could use different type systems. *Putting it another way, the MST of a value depends on who you ask :-). D&D want to ensure that equality of values is independent of declared types. *That's why they say that a selector for an ellipse value that happens to specify equal width and height actually returns a value which has an MST of circle. *It's like a "magic downcast". *They point out that OO systems don't normally work that way. *E.g. an OO constructor for ellipse never returns a circle. I think D&D end up treating relations with the same body and attribute names as equal. *i.e. in essence the declared attribute domains are not part of the relation's value. *I think they define subtyping of relation types accordingly. It seems to me that D&D spend a lot of effort discussing ideas that are either eliminated or trivialised in a typeless formalism of the RM. Formalization is less of an issue here. I interpret the question as how to make a working system operating predicates such as Plus(x,y,z) and Concat(x,y,z). Logical programming provides sort of an answer. |
#20
| |||
| |||
|
|
On Feb 17, 8:51*pm, Tegiri Nenashi <tegirinena... (AT) gmail (DOT) com> wrote: On Feb 17, 10:14*am, David BL <davi... (AT) iinet (DOT) net.au> wrote: On Feb 17, 9:15 pm, Nilone <rea... (AT) gmail (DOT) com> wrote: On Feb 17, 1:29 pm, David BL <davi... (AT) iinet (DOT) net.au> wrote: Operators can be formalised without a type system too. *Simply formalise an operator as a function defined on some domain, wherea domain is merely a set (not a "type"). Thanks for the introduction, I haven't seen the typeless model before. *I don't see how such a system would handle arithmetic operators (e.g. + and <) and string operators like concatenation and search - could you perhaps give an example? In a typeless system a unary function could for example be formalised as a triple (D,C,G) where D is the domain, C is the co-domain and G is the graph of the function (a subset of DxC). *This is typeless in the sense that a function value doesn't formally have any concept of a defined type. *Rather the domain and co-domain are formally part of the function's value as a triple (D,C,G). *For example two functions can have the same domain and graph but different co-domains. *That makes them distinct. *This is actually conventional, as when one determines whether a given function is surjective (i.e. its range equals its co-domain). *It wouldn't make sense to ask whether a function is surjective if its co-domain isn't part of its value. Alternatively a typeless system could instead formalise a unary function as a set of pairs (i.e. what we above called its graph). *In that case the domain and range is determined from the graph using projection, but there is no concept of a co-domain. Similarly a typeless system could formalise a relation in two different ways. *One allows for attributes to have domains specified independently of the graph (or "body") of the relation, and these domains represent part of the relation's value. *That means that two distinct relations can have exactly the same graph. Alternatively a relation can be identified with its graph. *In that case the domains are determined as the projection of each attribute. In a typeless formalism one is very clear about what it means for two functions or two relations to be equal. * It seems to require more effort to understand what equality means in a typed formalism. In a D&D type system, a value has a MST, but this actually depends on the prevailing type system. *E.g. two different databases could use different type systems. *Putting it another way, the MST of a value depends on who you ask :-). D&D want to ensure that equality of values is independent of declared types. *That's why they say that a selector for an ellipse value that happens to specify equal width and height actually returns a value which has an MST of circle. *It's like a "magic downcast". *They point out that OO systems don't normally work that way. *E.g. an OO constructor for ellipse never returns a circle. I think D&D end up treating relations with the same body and attribute names as equal. *i.e. in essence the declared attribute domains are not part of the relation's value. *I think they define subtyping of relation types accordingly. It seems to me that D&D spend a lot of effort discussing ideas that are either eliminated or trivialised in a typeless formalism of the RM. Formalization is less of an issue here. I interpret the question as how to make a working system operating predicates such as Plus(x,y,z) and Concat(x,y,z). Logical programming provides sort of an answer. You're right. *I'm a programmer rather than a mathematician. *As such, infinite sets can only be approximated and every value has a cost in space and time. *So I'm interested in how operators would be effectively (and hopefully, efficiently) defined in a software version of such a model. The operators in a typed system are based on inspecting and manipulation the representation of values. *I don't see how anything similar is possible in an untyped relational model. *There's exhaustively generating all operands and results, which is impractical. *With a successor operator defined (again, exhaustively?), we can define plus inductively, which would be highly inefficient. *Is there a way to define these operators without resorting to hidden types or an actor-like model of delegating the work to the operand? |
![]() |
| Thread Tools | |
| Display Modes | |
| |