entities – ¿Por qué Drupal almacena cada campo personalizado en una tabla separada?

Pregunta:

Entiendo que, para agregar funcionalidad a los nodos y tipos de nodos, se deben crear campos adicionales en la base de datos.

Ahora, no veo por qué se usa un esquema de un campo-una-tabla en lugar de favorecer el esquema de una sola tabla para un tipo de contenido, y luego, en esa tabla adicional, todos los campos adicionales. ¿Cuáles son las ventajas de ese enfoque?

Tengo un sitio con más de 1,000 tablas y la administración está siendo un desastre.

Respuesta:

Porque puede reutilizar los campos y adjuntarlos a más de un tipo de contenido, por ejemplo.

De hecho, obtienes 2 tablas para cada campo: una para almacenar la versión actual de los datos ( field_data_field_MACHINE_NAME ) y la otra para almacenar los valores "históricos" (si las revisiones están habilitadas) ( field_revision_field_MACHINE_NAME ). Algunos tipos de contenido pueden tener habilitada la revisión, lo que significa que los campos compartidos deben ser lo suficientemente "flexibles" para dar seguimiento a eso, pero al mismo tiempo almacenar los valores para los tipos de contenido con la revisión deshabilitada.

Si tuviera todo en una gran tabla para tipos de contenido (creo que D5 hizo esto), sería un gran lío de administrar, especialmente si compartiera campos entre entidades (por ejemplo, nodos y usuarios).

Algunas sugerencias:

  • Consulte esta respuesta de Clive para obtener más información.

  • Inspeccione esto en una instalación limpia solo para ver cómo funciona. Cree 2 tipos de contenido, agregue algunos campos (comparta algunos de ellos) y rastree lo que se ha cambiado y cómo se almacenan los datos en la base de datos. Probablemente podría cavar alguna página de documentación, pero creo que esta es la mejor manera de entender el esquema.

  • Reutilice los campos siempre que pueda para optimizar más la base de datos. Tenga en cuenta que puede haber algunas limitaciones (por ejemplo, opciones de lista, carga de archivos, obligatorio o no, etc.) que no le permitirán personalizar los campos para cada instancia, por lo que tendrá que crear otros nuevos.

Escribí esto con bastante rapidez, pero espero haber logrado explicarlo.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım