Relación tablas mysql

Estoy empezando a estudiar la base de datos mysql y aunque se puede hacer todo de una manera visual, me gustaría aprender las sentencias principales con código para poder programar después en algún lenguaje. Sobre todo como crear las relaciones 1 a 1, 1 a varios y varios a varios todo ello con sentencias.

También me gustaría que me explicaras la finalidad de estas relaciones creadas.

Si relaciono dos columnas de diferentes tablas, ¿al introducir datos en un registro de ellas se actualiza en la otra o algo así?

La verdad es que no lo tengo muy claro en este aspecto.

1 Respuesta

Respuesta
1

Supuse que te refieres a las restricciones o constraints del motor InnoDB, que se utilizan para mantener la integridad referencial (un tema de bases de datos en general, no solamente MySQL).

Finalidad: mantener la integridad de las referencias que se hacen de una tabla hacia otra.

Por ejemplo: una tabla de pedidos, siempre tiene un campo con el código de cliente. Por ejemplo: CLIENTE_ID

En la tabla de clientes debe haber un cliente que tenga ese mismo número de CLIENTE_ID

Una vez que configuras estas "relaciones" o "restricciones", la base de datos no te dejará borrar (dará error) un cliente que esté mencionado en un pedido. Tampoco te dejará cambiar el valor de CLIENTE_ID de un cliente, porque perderías la "conexión" con sus pedidos.

O bien, podrías usar (lo veremos en las sentencias) la opción CASCADE, en ese caso, las sentencias:

ON DELETE CASCADE provocará que al borrar el registro padre (ej: cliente) también se borren todos los registros hijo (ej: sus pedidos)

ON UPDATE CASCADE provocará que al modificar la clave principal del registro padre (su CLIENTE_ID), el mismo sea actualizado automáticamente en los registros hijos (ej: el CLIENTE_ID de un cliente pasa de ser 08 a 108, la restricción configurada hará que el CLIENTE_ID de sus pedidos cambie asimismo de 08 a 108).

Te envío esta respuesta que es bastante breve, pero últimamente debo hacerlas así o me demoro mucho y me atraso en responder. Lee sobre las sentencias ON DELETE CASCADE y ON UPDATE CASCADE, ahora que sabes de qué se tratan.

Por lo que veo es casi imprescindible crear este tipo de relaciones
entre tablas 1 a 1, 1 a varios y de varios a varios para que haya una
consistencia.

Creo que he entendido el tema de las relaciones , pero ahora mi duda es..

Por ejemplo si tengo un una bd con dos tablas (cliente y pedidos) que se relacionan mediante un idCliente común. Como puedo hacer un pedido con un cliente nuevo que no se haya registrado en clientes sin tener que irme a la tabla clientes y crearlo?

No debería existir tal cosa... Todo pedido debe tener su cliente.

Si es irrelevante saber quién hizo el pedido, usa un cliente por defecto, por ejemplo el ID 1 o el ID 9999 (o cualquier otro creado para ese fin). También puedes usar el cliente por defecto y que más tarde alguien cargue el cliente definitivo, con los datos que la aplicación no adivinará: nombre, dirección, teléfono. Otra alternativa es que el sistema solicite en el momento los datos mínimos: un nombre, una dirección, un teléfono, con ellos cree automáticamente el nuevo cliente, y utilice su ID para llenar el campo ID_Cliente del pedido.

Otra posibilidad es que simplemente no se use tabla de clientes porque sea raro que un mismo cliente repita un pedido, o porque no se necesiten estadísticas (ej: pizza a domicilio), en ese caso no normalices, no coloques datos del cliente en una tabla separada, y agrega 3 campos a la tabla de pedidos: nombre, dirección, teléfono. Cosa, por cierto, que va en contra de esas tendencias de fidelización en las que cuando un cliente vuelve a llamar le hacen sugerencias en base a sus pedidos anteriores.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas