Cómo gestionar las relaciones de la base de datos

Con una base de datos MySQL bien estructurada, se pueden utilizar las relaciones entre las tablas para aprovechar al máximo el potencial de PHPCG.


Las relaciones entre las diferentes tablas de una base de datos MySQL deben reflejar la estructura lógica de los datos.

Por lo tanto, es importante comprender los diferentes tipos de relaciones.

El Generador PHP CRUD es capaz de analizar su base de datos y comprender todo tipo de relaciones, directas e indirectas.

Una vez que sus relaciones estén correctamente establecidas, podrá mostrar todos los datos que necesite en las tablas de datos de su panel de administración de Bootstrap.


Aquí explicaremos los diferentes tipos de relaciones MySQL.

Para saber cómo configurar las relaciones de su base de datos, visite Cómo crear su base de datos con MySQL Workbench


Los diferentes tipos de relaciones en una base de datos MySQL

Consideremos una base de datos que contiene productos, clientes y sus pedidos.

Cada pedido pertenece a un cliente, y puede contener uno o varios productos adquiridos. Un mismo producto puede haber sido adquirido por varios clientes diferentes, o por el mismo cliente en varios pedidos.

Este es el aspecto de nuestro shema de base de datos:

MySQL database shema example with direct and indirect relationships
Ejemplo de shema de base de datos MySQL con relaciones directas e indirectas

Relaciones directas e indirectas

Relaciones directas (relaciones internas)uno a uno, uno a muchos

Una relación directa entre dos tablas A y B es una relación en la que la tabla A está directamente conectada a la tabla B mediante una clave foránea, obligatoria o no. Este tipo de relación puede ser de uno a uno o de uno a muchos.

En nuestro ejemplo, el campo pedidos . clientes_id es una relación directa con clientes.id.
El campo orders . customers_id es una clave foránea.

Esta relación permite asociar cada pedido a un cliente.

Con el Generador CRUD PHP, nos permitirá mostrar el nombre del cliente de cada pedido en la lista de pedidos.
En la pestaña Build List del Generador CRUD, verá la relación mostrada de esta manera: CRUD Generator direct relationship

Relaciones indirectas (relaciones externas)muchos-a-muchos

Una relación indirecta se utiliza para vincular varios registros de la tabla A con varios registros de la tabla B. Para ello, se utiliza una tabla intermedia, formada normalmente por dos claves foráneas, cada una de las cuales permite identificar los registros de las tablas A y B. Esta relación es una relación de muchos a muchos.

En nuestro ejemplo, la tabla products_orders es la tabla intermedia. Nos permite asociar los productos pedidos a los pedidos.
Tanto products_orders .products_id como products_orders.orders_id son claves foráneas.

Con el Generador PHP CRUD, permitirá mostrar todos los productos de cada pedido en una tabla anidada en la lista de pedidos.

El Generador también le permite elegir los campos de productos que desea mostrar, y si se permite a los usuarios del Panel de Administración añadir/editar/eliminar productos directamente desde la lista READ de pedidos.

Con el Generador CRUD PHP, nos permitirá mostrar el nombre del cliente de cada pedido en la lista de pedidos.
En la pestaña Build List del Generador CRUD, verá la relación mostrada de esta manera:

PHP CRUD Generator indirect relationship

Relaciones identificadoras y no identificadoras

Identificar las relaciones

Se puede definir una relación identificadora cuando dos tablas están unidas por el mismo identificador. En otras palabras, los registros de la segunda tabla son elementos o características inherentes de la primera tabla.

Por ejemplo: un libro se compone de capítulos. Cada capítulo forma parte de un libro identificado de forma única. En este caso, la clave foránea chapters.books_id figurará como segunda clave primaria de la tabla chapters.

Este tipo de relación se utiliza hoy en día muy raramente. En su lugar, se suele utilizar una relación indirecta, que es más generalista y menos restrictiva.

Relaciones no identificativas

Una relación no identificadora es una relación en la que dos tablas están unidas por una pertenencia o atributos comunes o una inclusión.

Por ejemplo: cada pedido pertenece a un cliente; cada pedido contiene uno o varios productos.

Página principal del tutorial PHP CRUD