En esta sesión de laboratorio se aboradrá el uso de instrucciones de manipulación de datos en SQL.
Revise la documentación del laboratorio 2 para crear y poner en marcha la base de datos tiendaOnline que es una versión minimalista para soportar la compra y venta de productos de una tienda online genérica. Se proponía el siguiente modelo conceptual:
.
El modelo conceptual anterior se transformó en el siguiente modelo relacional:
Usuario(!id, #email, contraseña, nombre)
Empleado(!id, @usuarioId, salario)
Cliente(!id, @usuarioId, direccionEnvio, codigoPostal, fechaNacimiento)
Pedido(!id, @clienteId, @empleadoId, fechaRealizacion, fechaEnvio, direccionEntrega, comentarios)
LineaPedido(!id, #(@pedidoId, @productoId), unidades, precioUnitario)
Producto(!id, nombre, descripción, precioUnitario, @tipoProductoId, puedeVenderseAMenores)
TipoProducto(!id, nombre)e incluía las siguientes restricciones en lenguaje natural:
- La constraseña debe ser de al menos 8 caracteres
- El cliente debe ser mayor de 14 años
- Los clientes menores de 18 años no pueden pedir productos que !puedeVenderseAMenores
- Los precios no pueden ser negativos
- La cantidad de un producto en un pedido no puede ser 0 ni superar 100.
Nótese que se ha optado por trasladar cada elemento de la generalización en una relación. Recuerde que hay otras alternativas viables y que cada una tiene sus ventajas e inconvenientes.
Se le vuelve a proporcionar el script siguiente:
- Fichero
scripts/1.creacionTablas.sqlcon todo el código SQL para la creación de las tablas y que aparece en este documento.
Recuerde la sintaxis de la operación INSERT. Consulte el manual de mariadb para los detalles sintácticos: https://mariadb.com/kb/en/insert/
- Inserta datos válidos en la tabla
Usuariospara cuatro usuarios diferentes, asegurándote de que la contraseña cumpla con la longitud mínima de 8 caracteres y el email sea único. - Inserta un cliente con una edad superior a 14 años en la tabla
Clientes, relacionado con uno de los usuarios previamente creados. - Inserta un cliente con una edad superior a 14 años y menor de 18 años en la tabla
Clientes, relacionado con uno de los usuarios previamente creados. - Inserta un cliente con que no tendrá ningun pedido..
- Inserta un empleado en la tabla
Empleados, relacionado con uno de los usuarios previamente creados. - Añade tipos de producto en la tabla
TiposProductopara categorías de productos (por ejemplo, "Electrónica", "Alimentos" y "Droguería"). - Inserta productos en la tabla
Productos, asociándolos a los tipos de producto creados previamente. Asegúrate de cumplir con las siguientes características para cada producto:Auriculares: Producto de tipo Electrónica, con un precio de 25.00, permitido para menores.Vino Tinto: Producto de tipo Alimentos, con un precio de 15.00, no permitido para menores.Chocolate: Producto de tipo Alimentos, con un precio de 3.50, permitido para menores.Cargador USB: Producto de tipo Electrónica, con un precio de 10.00, permitido para menores.Whisky: Producto de tipo Alimentos, con un precio de 45.00, no permitido para menores.
- Inserta un nuevo pedido para un cliente en la tabla
Pedidos. Incluye la fecha de realización, la dirección de entrega y algunos comentarios.- Ejemplo: Inserta un pedido para el cliente con
clienteId = 1, con la fecha de realización como la fecha actual, sin fecha de envío, dirección de entrega "Calle Ejemplo 45", y comentarios "Entrega urgente".
- Ejemplo: Inserta un pedido para el cliente con
- Añade líneas de pedido válidas para el pedido creado, asegurándote de que los productos seleccionados y sus cantidades cumplen las restricciones.
- Ejemplo: Inserta una línea de pedido para el producto con
productoId = 1, indicando 3 unidades y un precio unitario de 10.00. Inserta otra línea de pedido para elproductoId = 2con 5 unidades y un precio unitario de 15.00.
- Ejemplo: Inserta una línea de pedido para el producto con
- Inserta una línea de pedido con unidades fuera del rango permitido para un pedido existente, como 150 unidades, para verificar la restricción
CHECKdeunidades.
- Ejemplo: Para el pedido creado en el primer ejercicio, intenta añadir una línea de pedido con
productoId = 3, indicando 150 unidades y un precio de 20.00. Observa el error generado.
- Inserta una línea de pedido con precio negativo para verificar la restricción
CHECKdeprecio. - Inserta un pedido con un producto no vendible a menores en
LineasPedidopara un cliente menor de 18 años, y verifica que el triggercheck_edad_minoristase activa.
- Ejemplo: Si el cliente con
clienteId = 2tiene menos de 18 años, intenta insertar un pedido para él enPedidos, y luego añade una línea de pedido enLineasPedidoconproductoIdde un producto marcado como no vendible a menores (puedeVenderseAMenores = FALSE). Observa el error generado por el trigger.
- Intenta insertar una línea de pedido con un producto ya existente en el pedido para verificar la restricción UNIQUE
- Intenta insertar un usuario con una contraseña de menos de 8 caracteres en la tabla
Usuariosy observa el error por el CHECK de longitud. - Intenta insertar un cliente menor de 14 años en la tabla
Clientesy verifica el funcionamiento del triggercliente_edad_minima. - Intenta insertar un producto en la tabla
Productoscon precio negativo para verificar el CHECK de precio mínimo.
Recuerde la sintaxis de la operación UPDATE. Consulte el manual de mariadb para los detalles sintácticos:https://mariadb.com/kb/en/update/
- Actualiza el nombre de un usuario en la tabla
Usuarios. - Actualiza el salario de un empleado en la tabla
Empleados. - Modifica el precio de un producto en la tabla
Productospara asegurarte de que el valor sea positivo y mayor o igual a cero. - Actualizar un pedido para incluir la fecha de envío como la fecha actual. Use la función
CURDATE()para obtener la fecha actual. - Actualizar un pedido para incluir el empleado que lo gestion.
- Intenta actualizar la contraseña de un usuario con una contraseña de menos de 8 caracteres para verificar que el CHECK de longitud se respeta.
- Intenta modificar el precio de un producto en la tabla
Productosa un valor negativo para verificar la restricción de precio mínimo. - Intenta actualizar el número de unidades en la tabla
LineasPedidoa un valor fuera del rango permitido (mayor a 100) y observa el error generado.
- Borra un tipo de producto de la tabla
TiposProductoque no esté relacionado con ningún producto enProductos.
- Borra un usuario que tenga dependencias en
Clientes(configurado conON DELETE CASCADE). Al realizar esta operación, los registros enClientesasociados al usuario también deben eliminarse en cascada. Asegurate que el usuario-cliente no tiene pedidos asociados. - Intenta borrar un cliente que tenga registros asociados en la tabla
Pedidos. Este borrado debería fallar debido a la configuración deON DELETE RESTRICT, que impide eliminar un cliente con pedidos asociados. - Borra un empleado que esté asociado a un pedido en
Pedidos. Esta operación está configurada conON DELETE SET NULL, por lo que el campoempleadoIden la tablaPedidosdebería establecerse enNULLal eliminar el empleado.