= GenericTrac Data Model = {{{ #!div style="margin-top: .5em; padding: 0 1em; background-color: #ffd; border:1px outset #ddc;" '''Note:''' This page was about an experimental branch which was never started. Instead, it will eventually be developed as an experimental fork of Trac, which will provide more freedom in making deep changes and make it possible to host the development separately. }}} The branch was meant to try out the various ideas exposed in the following 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) == Related Tickets == - Data model issues: [[TicketQuery(status=!closed&keywords=~model)]] - Resource related: [[TicketQuery(status=!closed&keywords=~tracobject)]]