Title Extending the Nested Sets Model with "Hardlinked Nested Sets"
Student Enno Klasing
Mentor Louis Benton Landry
Abstract
Some of the most often requested new features for Joomla! are the abilities to
nest categories in an unlimited depth, and to place content into more than one
category. The usage of the Nested Sets Model offers an elegant and efficient
solution to this feature request.

During this year's Google Summer of Code, I would like to extend the current
Node Based Scheme libraries [1] – which implement a Nested Sets Model – with a
feature which I call "Hardlinked Nested Sets". Often it is needed to place the
same item into different parent items at the same time. This is a simple task
when dealing with just one single item each time. However, as soon as one wants
to duplicate a complete branch of items (e.g. for categories with sub-items in
it), this task becomes a whole lot more complicated.

Data integrity, execution time and the forming of valid routes to such sub-items
are three major issues which need to be taken into account.

 * Data integrity should be achieved at the library level, so that whenever a
   node which has hardlinked duplicates is being changed, all duplicated nodes
   will be changed as well. The Nested Sets Model (which is used by the NBS)
   already performs non-atomic actions, and therefore requires transactions.
   So if all extensions use the provided libraries, data integrity can be
   guaranteed.

 * When the main functionality becomes implemented in the data-changing
   routines, the "Hardlinked Nested Sets" feature will have a very small impact
   on execution time of data reading functions, but requires a little bit more
   time for storing data.

 * Routes to such hardlinked sets should still contain the IDs or names of the
   original items (except for the item where the linked branch starts), to
   present unique IDs or names to the outside (important e.g. for human readable
   URLs) and inside (important for future ACL implementations).

[1] http://code.google.com/soc/2006/joomla/appinfo.html?csaid=23A1F7A6CF74EC01