= GenericTrac Data Model = This is an experimental branch for trying out the various ideas exposed in the recent proposals: - TracDev/Proposals/DataModel - TracDev/Proposals/Journaling - WikiContext are used as ''resource descriptors'' and have a `.resource` field which enables one to fetch the corresponding data model instance See also [googlegroups:trac-dev:8cf3f5fe0e476ce5 this mail]. == Design Notes == As this will be a major redesign of the data model, it will also be a good opportunity to tackle the ''[TracMultipleProjects multiple project support]'' in Trac (#130). Each resource related table should probably get a `project` identifier field. == Current Status == === TODO === - modify the Milestone module so that it uses the new proposed datamodel. See [#TheMilestoneExample]. - experiment new tabbed view for the milestone (''View'', ''Discussion'', ''History''). See TracProject/UiGuidelines. - milestone should be able to have attachments, too (#3068) - adapt the Roadmap module to the new model - adapt the Milestone admin component to the new model Once this is complete, validate the genericity by promoting the components to be first class resources as well (#1233). Working on the generic aspect of Trac should also make it possible to implement various ''generic'' operations on Trac resources as plugins, mainly being able to (re-)implement TracCrossReferences as a plugin. === DONE === - ''Not yet started'' == The Milestone Example == The proposed data model would be: {{{ #!sql -- record Milestone current properties -- create table milestone_prop ( project text, id text, -- name text, value text ); create index milestone_idx on milestone_prop (id, name); -- record Milestone change metadata -- create table milestone_revision ( tid int primary key, -- date int, authname text, author text, ip text, authenticated int ); create index milestone_date_idx on milestone_revision ( date ); create index milestone_authname_idx on milestone_revision ( authname, authenticated ); -- Track changes of Milestone properties -- create table milestone_change ( tid int, project text, id text, -- name text, value text, unique (tid, project, id) ); -- record Milestone metadata -- create table milestone_schema ( project text, name text, -- revprop char, type text, detail text, value text, order int, unique (project, name) ); }}} The existing `milestone` table can be kept, it will simply not be used anymore. This will allow to test the branch within existing environments. The `name` is not unique in `milestone_change`, to allow multiple values (#918)