use ldap-style records: - key: value - ordered - can have duplicate keys / multiple values per key - this translates to cells holding lists in a table - can have duplicate records - a unique constraint can prevent this - null keys and null values are okay: key: and :value - the empty string as a value is not the same as null? or is it? - equivalent to empty list / set - it is allowed to have extra unusual keys - values can be records? a name set - a set of name with no value a value set - a set of values with no name Use calculated relations (calcs, func-sets) to implement relational ops such as where, select, rename, join, uniq, count, sort. - or maybe not, as this would be a bit recursive! Implement dmap, a dynamic map operation? change events: scalar: value-set += *= " ^= " # s{}{} # tr{}{} ...? list / string: splice reorder sorted / selected / spliced / whatever order and/or content changed list item/s changed: specific items all items changed in the same way hash: named items changed all items changed in the same way names are like a list: any list op on the set of names, e.g. items changed (actual names changed, not values) splice or reorder when adding, supply [name: value ...] Also, implement dreduce - dynamic reduce.