Básicamente, la segunda solución que propone es una lista vinculada. La lista enlazada implementada a nivel de base de datos generalmente no es una buena idea. Para recuperar una lista de elementos n
, necesitará el acceso a la base de datos n
(o utilice consultas complicadas). En cuanto al rendimiento, recuperar una lista en O (n) no es muy eficiente.
En el código normal, la lista vinculada se utiliza para obtener un mejor rendimiento de inserción en comparación con las matrices (no es necesario mover todos los elementos). En su base de datos, la actualización de todos los elementos no es tan complicado en tan sólo 2 consultas:
UPDATE item.order = item.order + 1 FROM item WHERE order > 3
INSERT INTO item (order, ...) VALUES (3, ...)
recuerdo ver una aplicación reutilizable que implementa todo eso y una buena interfaz de administración, pero no lo encuentro en este momento ...
Para resumir, definitivamente use la solución n. ° 1 y aléjese de la solución n. ° 2 a menos que tenga una muy buena razón para no hacerlo.
¡Hola! Estoy teniendo el mismo problema con el mismo problema. Una solución en la que pensé es usar el modelo en tu 'solución 1'. Pero en lugar de mover todo, solo cambié el valor del 'artículo reordenado'. Por ejemplo, quiero mover un elemento entre los artículos con el orden 9 y 10, simplemente cambiaré el orden del artículo a 9.5. ¿Crees que esto puede ser malo para las tablas largas? –