Pregunta

Ok, tengo una mesa que se verá así:

Post
 ˪ Id
 ˪ Version
 ˪ Title
 ˪ Content

La idea es que la identificación y la versión serán la clave principal, ya que puede tener una sola publicación varias veces pero de diferentes versiones.

Mi pregunta es esta: me gustaría tener la identificación para incrementar automáticamente. ¿Es esto posible en una configuración como esta? ¿Se enojarán las cosas cuando inserto la segunda versión de una publicación, por ejemplo?


Parece que necesito aclarar algunas cosas aquí. Lo que me gustaría es hacer algo como esto:

INSERT INTO posts VALUES (NULL, 0, "A title", "Some content");

Eso crearía una nueva publicación con alguna identificación automática de Auto. Digamos que obtuvo la identificación 7. Ahora quiero crear una nueva versión:

INSERT INTO posts VALUES (7, 1, "A new title", "Some adjusted content");

Funcionaría eso? ¿O la identificación aún obtendría un valor incrementado automático? E incluso si funcionó, ¿estoy haciendo algo que no debería desde el punto de vista de la base de datos, etc.?

¿Fue útil?

Solución

Considere los siguientes datos de ejemplo:

id  version  title  content   
1     1        t1     c1
2     1        t2     c2

Ahora un usuario cambia el título y el contenido de una publicación, creando una nueva fila con ID de incremento automático:

3     2        t3     t3

Esta es la versión dos de alguna publicación, pero no puede ver si es una nueva versión de Post One (entrada con ID 1) o Publica dos (entrada con ID 2).

Necesitas algo para identificar la publicación. Puede agregar una columna Post_ID a su tabla como sugiere Tobias en su respuesta.

Además, es posible eliminar la ID de incremento automático por completo y usar una clave primaria compuesta (post_id, versión): el punto principal es tener un post_id que no se incrementa automáticamente para que pueda tener datos como ese:

post_id  version  title  content   
1           1        t1     c1
2           1        t2     c2 
1           2        t3     t3

Aquí, está claro que la tercera fila representa una nueva versión de Post 1.

Otros consejos

Lo haría así:

Post:  
- ID (your primary key with auto_increment)
- post_id (this is which post you mean)
- version
- title
- content

La nueva ID solo especifica una ID única para este conjunto de datos. El post_id especifica a qué publicación pertenece este conjunto de datos y la versión representa la revisión de la entrada.

¿Por qué no usas el Id Como algún tipo de indicador de versión, de lo contrario, tendría dos columnas que sirven al mismo propósito que se considera un defecto en el diseño de DB.

Utilizaría una clave primaria compuesta donde ID y versión juntas identifiquen la entrada. Luego puede Auto_Increment ID. Cuando agrega una nueva entrada, se incrementará automáticamente. Cuando revise una publicación, defina explícitamente la identificación y la revisión e ID no se incrementarán.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top