Martijn van Oosterhout <kleptog@xxxxxxxxx> writes: > Now, how to store the relationships between them to handle > multiplication and division. Probably go back to base types... I've thought about this myself quite a bit. I decided that trying to implement multiplication and division is a bad idea. What you really want is just a type that guarantees that you can add and subtract two dimensional values as long as they're in the same units. (1km + 2km = 3km) You should also be able to divide two dimensional values of the same type and get a plain dimensionless floating point number. (2km / 1km = 2.0) Also you should be able to multiple or divide a dimensional value with a dimensionless value. (2km * 2.0 = 4km) All of the above doesn't require recognizing what the meaning of the dimensions are at all. As long as they're all linear they can be completely opaque strings. That keeps the system quite simple. It also keeps it most flexible in that a user can use *any* unit whatsoever. Not just units from some approved list. If you wanted to implement multiplying two dimensioned values or converting from one unit to another then you would suddenly have to know the meaning of every unit. You could implement the sementic-free approach where the system doesn't know anything about the actual meanings of units and then implement a function that allows you to call out to the traditional units program to convert. So you could have units_conv(dim_val, 'km') to call units and request to convert whatever is in the dim_val column into km. And maybe a units_expr(dim_val||'*'||dim_val2, 'km^2'). I would suggest this because it doesn't try to reimplement all of units and it isolates the complex parts that limit the flexibility of the system in one area. Someone who isn't trying to use postgres as a units substitute doesn't have to deal with it. -- greg ---------------------------(end of broadcast)--------------------------- TIP 6: Have you searched our list archives? http://archives.postgresql.org