¿Cómo puedo estructurar mis tablas de la base de tal manera que sus órdenes se pueden reorganizar en cualquier momento?

Panpaper:

Estoy trabajando en un proyecto personal que, básicamente, guarda la salida desde un editor de texto enriquecido en una base de datos por lo que se puede acceder de nuevo más tarde en un dispositivo diferente. El usuario puede añadir "páginas" a las notas para los diferentes capítulos o temas.

El problema que encontré es que no soy capaz de cambiar el orden de las notas, o insertar una nueva página en algún lugar. Mi solución actual es tener 2 IDs - uno es el índice primario (ID), y el otro es un identificador relativo (RID). Para reorganizar las filas, acabo de cambiar el RID de esa fila, a continuación, ordenar las filas por RID al mostrarlos.

ID | RID | page_title | page_content
01 | 01  | Hello      | Hello world
02 | 02  | Goodbye    | See ya

Esto funciona cuando tengo muy pocas páginas, pero si tuviera 100 páginas y me gustaría reorganizar o insertar una nueva fila en el medio, que tendría que cambiar el RID para cada fila de abajo, donde se realizó el cambio.

¿Cuál es la forma correcta de estructurar mi mesa de tal manera que es fácil reorganizar o insertar en adelante? Estoy familiarizado con MySQL usando phpMyAdmin, y SQLite usando SQLAlchemy.

Lo siento si esto se ha hecho antes, es difícil formular la pregunta en una búsqueda en Google, me quedé con la obtención de resultados irrelevantes. ¡Gracias por adelantado!

Chris Johnson:

Hay muchas maneras de hacer esto. Una forma sencilla sería la de tratar a las páginas como una lista enlazada. En lugar de una columna de orden, utilizar una priorcolumna que puntos a (FK) la página que precedió a estos página.

Por ejemplo, a partir de páginas en orden ABCD:

id, page name, prior
1, a, null
2, b, 1
3, c, 2
4, d, 3
5, e, 4

Para mover la página “b” para después de la página “d”, lo haría:

(1) cambio c es antes de la 1

(2) el cambio b es antes de 4

(3) de cambio de correo es antes de 2

Hacer todo lo que dentro de una transacción y ya está de oro. La nueva lista se parece a esto:

id, page name, prior
1, a, null
2, b, 4
3, c, 1
4, d, 3
5, e, 2

Se necesitará el mismo número de operaciones (3 para una lista simplemente enlazada) sin importar el número de páginas total que tiene.

Asegúrese de probar su aplicación para mover la primera página (antes = null) ya que es un caso especial.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=294219&siteId=1
Recomendado
Clasificación