= 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 See also [googlegroups:trac-dev:8cf3f5fe0e476ce5 this mail]. == 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 ( id text, name text, value text ); create index milestone_idx on milestone_prop (id, name); -- record Milestone change metadata -- create table milestone_journal ( tid int primary key, date int, authname text, author text, ip text, authenticated int ); create index milestone_date_idx on milestone_journal ( date ); create index milestone_authname_idx on milestone_journal ( authname, authenticated ); -- record Milestone changed properties -- create table milestone_history ( tid int, id text, name text, value text, unique (tid, id) ); }}} The existing `milestone` table can be kept, it will simply not be used anymore. This will allow to test the branch within existing environments.