Quiero crear un sistema de etiquetas simple usando php y mysql, para que los usuarios puedan agregar algunas etiquetas a través del formulario. Mi pregunta es, ¿debería guardar las etiquetas como una matriz en una sola columna de base de datos? p.ej. "tag1, tag2, tag3" ... o debería tener columnas separadas en la tabla de la base de datos donde debería guardar cada etiqueta en cada columna. Espero que mi pregunta sea clara. Gracias.cómo guardar etiquetas (palabras clave) en la base de datos?
Respuesta
Probablemente diría que ninguno de los dos. Use una relación de varios a varios entre las etiquetas y el objeto que se va a etiquetar. Por ejemplo, si lo que se etiqueta es una pregunta, las tablas puede verse como esto:
Question:
QuestionId
Title
Body
Tag:
TagId
Name
QuestionTags:
QuestionId
TagId
usted podría utilizar serializar y unserialise para almacenar las palabras clave en un campo. Más información aquí http://php.net/manual/en/function.serialize.php
Algo como esto ...
$keywords = array('apple', 'pear', 'banana', 'peach');
$keywords_serialized = serialize($keywords);
$sql = INSERT INTO dbtable (keywords) VALUES ($keywords_serialized);
Cómo matar el rendimiento ... –
Debería ser algo muy raro que una cadena serializada se almacene en una base de datos. –
gracias, aprendí algo hoy – user466764
encontré con ese tema hoy en día también se reunieron y algunas ideas aquí, y aunque la pregunta no es muy nuevo, voy a dejar mi solución también:
Creo que la respuesta que dio Klaus Byskov Hoffmann no fue mala, pero agregaría eso y almacenaría la lista de referencias como tabla de muchos a muchos como él dijo, pero también como cadena serializada de alguna forma (ya sea a través de serializar como dijo user466764, o simplemente como una coma separada, como dijiste a ti mismo, que podría manejarse con i mplode/explode) en la tabla principal.
sí, lo sé: el almacenamiento de los mismos datos dos veces no es muy bien recibida con muchos perfeccionistas de bases de datos, ya que lleva el peligro de recibir inconsistencias, pero lo haría de esa manera para el rendimiento y simplicidad:
la tabla de muchos a muchos (tabla de etiquetas) es solo para búsqueda. para aumentar el rendimiento de la búsqueda, limitaría el acceso a esa tabla ÚNICAMENTE para buscar (y, por supuesto, debemos actualizarlo cuando se editen las etiquetas), pero nunca lo consulte solo para ver/enumerar las etiquetas en algún lugar. y la lista de etiquetas serializada es para cada lugar donde está viendo el artículo o artículo en cuestión: cuando visualiza ese artículo, ya tiene la tabla, realizando otra consulta a la tabla de etiquetas cada vez que desea mostrar esa página. innecesario cuando ya tienes la lista en la tabla principal. asegúrese de tener cuidado al actualizar las etiquetas para actualizarlas siempre en ambos lugares, preferiblemente a través de una única función de configuración que hace ambas cosas, y no debería tener problemas de inconsistencia.
Totalmente de acuerdo. La optimización del tiempo de carga de la página debería ser tan importante como la normalización de la base de datos. – KalC
- 1. Cómo guardar etiquetas/palabras clave de la matriz a la base de datos con php?
- 2. cómo seleccionar palabras clave únicas de una coma separó etiquetas
- 3. ¿Cómo obtener la base de datos de palabras en inglés?
- 4. C# Constructor de palabras clave de base
- 5. Buscar las primeras 4 palabras y las últimas 4 palabras de la base de datos después de palabras clave particulares?
- 6. palabras uso base de datos?
- 7. Guardar datos en árabe en la base de datos MySQL
- 8. Almacenamiento de etiquetas en la base de datos. ¿Guardar etiqueta una o más veces?
- 9. ¿Cómo se modelan las etiquetas en la base de datos?
- 10. Cómo guardar imágenes en la base de datos usando C#
- 11. Cómo guardar la imagen en una base de datos?
- 12. Cómo guardar el modelo Backbone.js en la base de datos
- 13. ¿Cómo guardar una cadena cifrada en la base de datos?
- 14. Cómo guardar etiquetas con acts_as_taggable_on?
- 15. ¿Cuál es la solución óptima para la coincidencia de etiquetas/palabras clave?
- 16. Dónde guardar la clave AES?
- 17. guardar texto con formato html en la base de datos
- 18. Cómo hacer caso omiso de etiquetas de palabras clave de CVS en diff Eclipse
- 19. Guardar matriz en la base de datos mysql
- 20. Guardar acentos en la base de datos MySQL
- 21. cómo guardar relación marital en una base de datos
- 22. Base de datos de búsqueda de palabras ofensivas
- 23. Autoincrement clave principal en la base de datos Oracle
- 24. Mongo Base de Datos de guardar los datos del mapa
- 25. Pares de valores clave en la base de datos relacional
- 26. base de datos MySQL de palabras en inglés?
- 27. cómo escapar palabras clave en C#?
- 28. Cómo usar palabras clave personalizadas en SVN
- 29. ¿La mejor manera de almacenar etiquetas en una base de datos?
- 30. javaScript palabras clave reservadas
De esta manera proporciona escalabilidad y permite la optimización de la base de datos con índices. Buena respuesta. –
Aterricé en esta página buscando recomendaciones para actualizar una lista de etiquetas en dicho esquema. ¿Como lo harias? ELIMINAR FROM QuestionTags WHERE QuestionId = 123 y luego INSERTing INTO QuestionTags todas las etiquetas restantes y nuevas? Parece ser el más fácil para el desarrollador, pero podría no ser el mejor para el rendimiento ... – Henno
@Henno No estoy seguro de entender lo que quieres decir. ¿Puedes hacer una pregunta por separado? –