Another alternative would be to use an open source graph database such as OrientDB (http://orientdb.com/orientdb/) which would allow Tasks, Efforts, Notes, Categories etc. to be modelled as vertices and relationships between them as edges. In an OrientDB database vertices and edges may have an associated class (and it supports object-oriented-like inheritance) and both vertex and edge classes may have predefined attributes. OrientDB also supports SQLite style direct access to a database file *and* access to a database via a OrientDB server.
Just a thought... :-) If I had time I would try to implement this myself.
Another alternative would be to use an open source graph database such as OrientDB (http://orientdb.com/orientdb/) which would allow Tasks, Efforts, Notes, Categories etc. to be modelled as vertices and relationships between them as edges. In an OrientDB database vertices and edges may have an associated class (and it supports object-oriented-like inheritance) and both vertex and edge classes may have predefined attributes. OrientDB also supports SQLite style direct access to a database file *and* access to a database via a OrientDB server.
Just a thought... :-) If I had time I would try to implement this myself.