Pregunta

Espero que alguien pueda editar mi título para describir mejor lo que quiero decir, porque no sé exactamente cómo se llamaría esto. Sin embargo, considere esta configuración: quiero crear un sistema de notificación, donde se muestra un mensaje a un usuario hasta que haga clic en "descartar". Luego necesito "recordar" que este usuario ha descartado la notificación, así que no se lo muestro nuevamente. Aquí está mi solución actual

  • users La mesa tiene un uid Información de la clave principal y del usuario
  • notifications La mesa tiene un nid Clave principal y texto de notificación
  • notifications_seen tabla con dos columnas, uid y nid

Cuando alguien hace clic en una notificación, almaceno su uid y la notificación nid en notifications_seen. Esto parece funcionar bien, pero Phpmyadmin tiene mensajes rojos gigantes que me dicen que notifications_seen no tiene un índice. Sin embargo, ninguna de las columnas es única. ¿Debería realmente tener una columna más inútil? notifications_seen ¿Y llamar a eso una clave principal? ¿Hay una mejor manera de hacer esto?

¿Fue útil?

Solución

Puede usar más de una columna para crear su clave principal. En este caso, debe configurar NID y UID como su clave principal en su tabla de notificaciones_seen. La idea aquí es que a pesar de que ni NID ni UID serán únicos dentro de su tabla de notificaciones_seen; El par NID/UID es único. Debe agregar una restricción de clave principal a estas dos columnas. Esto suele ser lo que le gustaría hacer para este tipo de situación.

Hay momentos en los que es posible que desee crear una fila de incremento automático para simplificar la clave principal. Por ejemplo, cuando su mejor clave candidata consiste en muchas columnas (estoy sacando esto del aire; pero digamos 4 o más columnas) o tiene columnas que contienen cadenas; Lo cual sería más lento para igualar al hacer búsquedas. Pero para esta situación, solo agregar la restricción clave principal a las dos columnas debería estar más que bien.

Las claves primarias se indexan por defecto; Es por eso que debe agregar la restricción de clave principal a las dos columnas. Esto también preservará la integridad de sus datos asegurándose de no insertar accidentalmente filas con el mismo par UID/NID.

También debe agregar una restricción de clave extranjera en el UID a la ID en la tabla de usuarios, y una restricción de clave extranjera al NID en el ID en la tabla de notificaciones. Agregar las restricciones de clave externa asegurará que no inserte UID o NID que en realidad no existan en su tabla de notificaciones_seen.

Otros consejos

Es posible que pueda crear una clave primaria compuesta (que consiste en ambos uid y nid).

Podrías hacer un índice en notifications_seen eso contiene ambas cosas ¡Columnas! O crear una columna separada solo para una clave principal, o hacer ambas cosas, tener un índice en uid y nid puede que Acelere las consultas (pero no se preocupe demasiado por eso hasta que comience a notar problemas de rendimiento importantes, solo recuerde para el futuro). Tener una clave principal para estas relaciones N: N no es algo terrible.

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