![]() | |
#1
| |||
| |||
|
#2
| |||
| |||
|
|
Consider a requirement to record electronic circuits in a relational database. Circuits are abstract mathematical objects (i.e. "values") independent of physical layout. There is no requirement to label individual components (e.g. all 1 ohm resistors are indistinguishable), nor any requirement to label circuit nodes. The reason for recording circuit values in a physical database is outside the scope of this discussion. Two circuits are equivalent if they are isomorphic. A model for a circuit value must define exactly when circuits are identical. Failure to do so would mean for example that a set of circuit values is ill- defined (e.g. one cannot determine the cardinality of the set). In principle a very large circuit can consist of thousands of components, wired up in a complex network. Recursive types cannot eliminate the need for abstract identifiers. One approach is to use abstract identifiers for the circuit nodes, and use relations such as: * * resistor(N1,N2,R) :- there is a resistor of value R * * * * connected between nodes N1,N2. This raises the question of whether the following symmetry * * * * resistor(N1,N2,R) <=> resistor(N2,N1,R) should be an integrity constraint. If so then in the logical model information is represented twice and it complicates updates. If not then there are potential surprises when using the relation. *Do we take the union of the resistors connected from N1 to N2, and N2 to N1? Two or more resistors connected in parallel between a given pair of nodes are always equivalent to some single resistor value, so in theory we could make {N1,N2} the key. *If we want to model resistors in parallel then even if the key is {N1,N2,R} there cannot be multiple resistors of the same value. *To model that we could instead use: * * resistor'(N1,N2,R,M) :- there are M resistors * * * * of value R connected (in parallel) between * * * * nodes N1,N2. I find it curious that we would only tend to record the tuples where M>0. *Normally under a closed world assumption one expects the set of tuples for a given relation to be uniquely defined. *However in this case, under CWA, a tuple with M=0 can be removed without changing the circuit value. *Note as well that a similar issue would occur in the relation * * resistor''(N1,N2,C) :- there is a resistor with * * * *conductance C (in siemens) connected between * * * *nodes N1,N2. because resistors with zero conductance are equivalent to no resistor at all. I find this interesting because it complicates the definition of circuit identity. One could apply the integrity constraint C>0, however that somehow seems artificial in a logical model, and more like a rule an implementation would impose. I'd like to know whether circuit identity can be implicit in the database schema by treating abstract identifiers specially. If there's still ambiguity in the model then a comparison operator must be separately and explicitly defined. Is that acceptable given that C.Date says the relations *are* the logical model? Tuples have a well defined definition of equality (they must have the same attribute names and values), and so also for relations which are sets of tuples. *One can't mess with these definitions! It follows that a tuple with relation valued attributes cannot really be used to define a possrep for a circuit if it fails to define logical equivalence as we would like. The missing concept seems to be encapsulation in the sense used for an ADT defined in terms of a private implementation. |
#3
| |||
| |||
|
|
Consider a requirement to record electronic circuits in a relational database. Circuits are abstract mathematical objects (i.e. "values") independent of physical layout. There is no requirement to label individual components (e.g. all 1 ohm resistors are indistinguishable), nor any requirement to label circuit nodes. The reason for recording circuit values in a physical database is outside the scope of this discussion. Two circuits are equivalent if they are isomorphic. A model for a circuit value must define exactly when circuits are identical. Failure to do so would mean for example that a set of circuit values is ill- defined (e.g. one cannot determine the cardinality of the set). In principle a very large circuit can consist of thousands of components, wired up in a complex network. Recursive types cannot eliminate the need for abstract identifiers. One approach is to use abstract identifiers for the circuit nodes, and use relations such as: resistor(N1,N2,R) :- there is a resistor of value R connected between nodes N1,N2. This raises the question of whether the following symmetry resistor(N1,N2,R) <=> resistor(N2,N1,R) should be an integrity constraint. If so then in the logical model information is represented twice and it complicates updates. If not then there are potential surprises when using the relation. Do we take the union of the resistors connected from N1 to N2, and N2 to N1? |
|
Two or more resistors connected in parallel between a given pair of nodes are always equivalent to some single resistor value, so in theory we could make {N1,N2} the key. If we want to model resistors in parallel then even if the key is {N1,N2,R} there cannot be multiple resistors of the same value. To model that we could instead use: resistor'(N1,N2,R,M) :- there are M resistors of value R connected (in parallel) between nodes N1,N2. I find it curious that we would only tend to record the tuples where M>0. Normally under a closed world assumption one expects the set of tuples for a given relation to be uniquely defined. However in this case, under CWA, a tuple with M=0 can be removed without changing the circuit value. Note as well that a similar issue would occur in the relation resistor''(N1,N2,C) :- there is a resistor with conductance C (in siemens) connected between nodes N1,N2. because resistors with zero conductance are equivalent to no resistor at all. I find this interesting because it complicates the definition of circuit identity. One could apply the integrity constraint C>0, however that somehow seems artificial in a logical model, and more like a rule an implementation would impose. I'd like to know whether circuit identity can be implicit in the database schema by treating abstract identifiers specially. If there's still ambiguity in the model then a comparison operator must be separately and explicitly defined. Is that acceptable given that C.Date says the relations *are* the logical model? Tuples have a well defined definition of equality (they must have the same attribute names and values), and so also for relations which are sets of tuples. One can't mess with these definitions! It follows that a tuple with relation valued attributes cannot really be used to define a possrep for a circuit if it fails to define logical equivalence as we would like. The missing concept seems to be encapsulation in the sense used for an ADT defined in terms of a private implementation. |
#4
| |||
| |||
|
|
I think it might be simpler to assign artificial identifiers to the components instead of the nodes. It is certainly more intuitive. Each component has a finite number of leads, and each lead can connect with zero or more components, possibly other leads on the same component. For example, a NOR gate becomes an inverter if you tie the inputs together. The circuits can then be represented entirely as a set of unordered pairs: {{component, lead}, {component, lead}} |
|
I think that for components with two leads that can operate in either orientation, if the lead identifiers were also treated like bound variables, along with the component identifiers, then circuits would still be considered equivalent even if one or more of the components that can be reversed are. |
|
The definition of an entity relation according to its properties or to a specific context is not a relational definition. |
#5
| |||
| |||
|
|
On Jul 3, 5:23 am, "Brian Selzer" <br... (AT) selzer-software (DOT) com> wrote: I think it might be simpler to assign artificial identifiers to the components instead of the nodes. It is certainly more intuitive. Each component has a finite number of leads, and each lead can connect with zero or more components, possibly other leads on the same component. For example, a NOR gate becomes an inverter if you tie the inputs together. The circuits can then be represented entirely as a set of unordered pairs: {{component, lead}, {component, lead}} Consider a node to which n components are connected and n is large. Using pairwise connections can either be exceedingly arbitrary (by only representing n-1 pairs) or it makes for enormous redundancy (by representing all n(n-1)/2 pairs). I think this is much worse that the symmetry problem with resistors. |
|
Note that netlists used by circuit simulation programs like SPICE tend to use something similar to what I discussed - i.e. for each component list all the nodes to which it is connected. One difference is that they require component labels as well as node labels. I think that for components with two leads that can operate in either orientation, if the lead identifiers were also treated like bound variables, along with the component identifiers, then circuits would still be considered equivalent even if one or more of the components that can be reversed are. You might to be onto something there. I've also been thinking that the concept of bound variables could be relevant. I came at this by thinking about the idea of instantiating circuit values within containing circuits. To achieve circuit reuse I was thinking that circuit values must be named (so they can be referenced by name in order to be instantiated within another circuit). The definition of an entity relation according to its properties or to a specific context is not a relational definition. You're repeating Cimode? |
#6
| |||
| |||
|
|
"David BL" <davi... (AT) iinet (DOT) net.au> wrote in message |
|
Consider a node to which n components are connected and n is large. Using pairwise connections can either be exceedingly arbitrary (by only representing n-1 pairs) or it makes for enormous redundancy (by representing all n(n-1)/2 pairs). I think this is much worse that the symmetry problem with resistors. I see your point, but I still think that assigning components artificial identifiers is better: the unordered pairs could be replaced with or preprocessed into a single set per node prior to the determination of isomorphism. For example, {resistor1:lead1,capacitor2:lead1,transistor1:lead 2} discribes a node that connects a resistor and a capacitor to the base of a transistor. The above contains the same information as the unordered pairs {{resistor1:lead1,capacitor2:lead1}, {resistor1:lead1,transistor1:lead2}} without either the arbitrariness or the redundancy you seek to avoid. |
#7
| |||
| |||
|
|
On Jul 3, 12:58 pm, "Brian Selzer" <br... (AT) selzer-software (DOT) com> wrote: "David BL" <davi... (AT) iinet (DOT) net.au> wrote in message Consider a node to which n components are connected and n is large. Using pairwise connections can either be exceedingly arbitrary (by only representing n-1 pairs) or it makes for enormous redundancy (by representing all n(n-1)/2 pairs). I think this is much worse that the symmetry problem with resistors. I see your point, but I still think that assigning components artificial identifiers is better: the unordered pairs could be replaced with or preprocessed into a single set per node prior to the determination of isomorphism. For example, {resistor1:lead1,capacitor2:lead1,transistor1:lead 2} discribes a node that connects a resistor and a capacitor to the base of a transistor. The above contains the same information as the unordered pairs {{resistor1:lead1,capacitor2:lead1}, {resistor1:lead1,transistor1:lead2}} without either the arbitrariness or the redundancy you seek to avoid. I cannot tell which approach is better. Anyway, the point I find interesting is that in both cases nesting can ensure the schema meets the given requirements for logical equivalence of circuit values. |
#8
| |||
| |||
|
|
"David BL" <davidbl (AT) iinet (DOT) net.au> wrote in message news:095c8b9d-eb68-4a39-acdf-942d5db07b2e (AT) y10g2000prf (DOT) googlegroups.com... On Jul 3, 12:58 pm, "Brian Selzer" <br... (AT) selzer-software (DOT) com> wrote: "David BL" <davi... (AT) iinet (DOT) net.au> wrote in message Consider a node to which n components are connected and n is large. Using pairwise connections can either be exceedingly arbitrary (by only representing n-1 pairs) or it makes for enormous redundancy (by representing all n(n-1)/2 pairs). I think this is much worse that the symmetry problem with resistors. I see your point, but I still think that assigning components artificial identifiers is better: the unordered pairs could be replaced with or preprocessed into a single set per node prior to the determination of isomorphism. For example, {resistor1:lead1,capacitor2:lead1,transistor1:lead 2} discribes a node that connects a resistor and a capacitor to the base of a transistor. The above contains the same information as the unordered pairs {{resistor1:lead1,capacitor2:lead1}, {resistor1:lead1,transistor1:lead2}} without either the arbitrariness or the redundancy you seek to avoid. I cannot tell which approach is better. Anyway, the point I find interesting is that in both cases nesting can ensure the schema meets the given requirements for logical equivalence of circuit values. I think that this is the perfect counterexample to some of the myths that are perpetuated here on cdt. It illustrates valid uses of both artificial identifiers and nesting. I think one would be hard pressed to come up with a solution that doesn't involve the use of artificial identifiers. The nesting can, of course, be dispensed with through the introduction of additional artificial identifiers. |
#9
| |||
| |||
|
|
Brian Selzer wrote: I think that this is the perfect counterexample to some of the myths that are perpetuated here on cdt. It illustrates valid uses of both artificial identifiers and nesting. I think one would be hard pressed to come up with a solution that doesn't involve the use of artificial identifiers. The nesting can, of course, be dispensed with through the introduction of additional artificial identifiers. I think it is a perfect example of wondering why chisels don't make good screwdrivers. |
#10
| |||
| |||
|
|
Brian Selzer wrote: "David BL" <davidbl (AT) iinet (DOT) net.au> wrote in message news:095c8b9d-eb68-4a39-acdf-942d5db07b2e (AT) y10g2000prf (DOT) googlegroups.com... On Jul 3, 12:58 pm, "Brian Selzer" <br... (AT) selzer-software (DOT) com> wrote: "David BL" <davi... (AT) iinet (DOT) net.au> wrote in message Consider a node to which n components are connected and n is large. Using pairwise connections can either be exceedingly arbitrary (by only representing n-1 pairs) or it makes for enormous redundancy (by representing all n(n-1)/2 pairs). I think this is much worse that the symmetry problem with resistors. I see your point, but I still think that assigning components artificial identifiers is better: the unordered pairs could be replaced with or preprocessed into a single set per node prior to the determination of isomorphism. For example, {resistor1:lead1,capacitor2:lead1,transistor1:lead 2} discribes a node that connects a resistor and a capacitor to the base of a transistor. The above contains the same information as the unordered pairs {{resistor1:lead1,capacitor2:lead1}, {resistor1:lead1,transistor1:lead2}} without either the arbitrariness or the redundancy you seek to avoid. I cannot tell which approach is better. Anyway, the point I find interesting is that in both cases nesting can ensure the schema meets the given requirements for logical equivalence of circuit values. I think that this is the perfect counterexample to some of the myths that are perpetuated here on cdt. It illustrates valid uses of both artificial identifiers and nesting. I think one would be hard pressed to come up with a solution that doesn't involve the use of artificial identifiers. The nesting can, of course, be dispensed with through the introduction of additional artificial identifiers. I think it is a perfect example of wondering why chisels don't make good screwdrivers. |
![]() |
| Thread Tools | |
| Display Modes | |
| |