(Photo credit: Wikipedia) |
Es decir, si agrega algún item de contenido, se desea que automáticamente se agregue el enlace a ese item en el menú, de modo desatendido. Parece a primera vista una situación sencilla de resolver, pero en la práctica presenta desafíos.
CREATE TABLE `articles` ( `article_id` INT NOT NULL AUTO_INCREMENT , `title` VARCHAR(45) NOT NULL , `content` TEXT NULL , `article_parent_id` INT NOT NULL , PRIMARY KEY (`article_id`) ) ENGINE = InnoDB
Claro, a primera vista el problema podría ser abordado usando las técnicas de programación para manejar una estructura de datos de tipo árbol. Programando, por ejemplo, en PHP una función recursiva para construir los distintos elementos en la lista, con su correspondiente profundidad, desarrollando un despliegue del tipo:
-- HOMEPAGE-- | -- PRODUCTOS-- | | | | | -- CATEGORIA 1 | | | | | --PRODUCTO 5 | | | | | --PRODUCTO 3 | | | -- CATEGORIA 2 | | | | | --PROUCTO 2 . . . . | | | -- CATEGORIA N | -- ACERCA DE-- | -- CONTACTENOS--
Las soluciones a este problema se formulan en dos modelos que permiten manejar la data jerárquica en una tabla, aplicables en todos los sistemas de bases de datos relacionales de corriente principal, los modelos son:
- Modelo de Lista Adjacente: que corresponde al primer código SQL presentado en este artículo.
- Modelo de Conjuntos Anidados: que presenta una forma más elaborada de almacenar la información, pero tiene la ventaja de que su recuperación es muy eficiente.
- Trees and Hierachies in SQL: Adjacency List Model
- Storing Hierarchical Data in a Database Article
- PostgreSQL: Documentation: 9.1: Ltree
- My take on trees in SQL
- Managing Hierarchical Data in MySQL
- Hierarchical data in MySQL: parents and children in one query
- The modified preorder tree traversal algorithm
- http://en.wikipedia.org/wiki/Hierarchical_database_model