Descripción de las tablas
Tabla: City (Ciudad)
- Descripción: Esta tabla almacena la información sobre diferentes ciudades.
- Columnas:
- id: Una cadena única que identifica a cada ciudad.
- name: El nombre de la ciudad.
- stateId: Una cadena que se relaciona con la tabla de estados.
Tabla: State (Estado)
- Descripción: Esta tabla almacena la información sobre diferentes estados.
- Columnas:
- id: Una cadena única que identifica a cada estado.
- name: El nombre del estado.
Tabla: Seller (Vendedor)
- Descripción: Almacena la información sobre diferentes vendedores.
- Columnas:
- id: Una cadena única que identifica a cada vendedor.
- name: El nombre del vendedor.
- email: El correo electrónico del vendedor, que debe ser único.
Tabla: Customer (Cliente)
- Descripción: Almacena la información sobre los clientes.
- Columnas:
- id: Una cadena única que identifica a cada cliente.
- name: El nombre del cliente.
- email: El correo electrónico del cliente, que debe ser único.
- address: La dirección del cliente.
Tabla: Supplier (Proveedor)
- Descripción: Almacena la información sobre los proveedores que suministran productos.
- Columnas:
- id: Una cadena única que identifica a cada proveedor.
- name: El nombre del proveedor.
Tabla: ProductCategory (ProductoCategoría)
- Descripción: Es una tabla intermedia que relaciona productos con categorías.
- Columnas:
- productId: Una cadena que se relaciona con la tabla de productos.
- categoryId: Una cadena que se relaciona con la tabla de categorías.
Tabla: Product (Producto)
- Descripción: Almacena la información sobre diferentes productos.
- Columnas:
- id: Una cadena única que identifica a cada producto.
- name: El nombre del producto.
- price: El precio del producto.
- supplierId: Una cadena que se relaciona con la tabla de proveedores.
Tabla: Category (Categoría)
- Descripción: Almacena diferentes categorías a las que pueden pertenecer los productos.
- Columnas:
- id: Una cadena única que identifica a cada categoría.
- name: El nombre de la categoría.
Tabla: Order (Orden)
- Descripción: Almacena la información sobre las órdenes realizadas por los clientes.
- Columnas:
- id: Una cadena única que identifica cada orden.
- sellerId: Una cadena que se relaciona con la tabla de vendedores.
- cityId: Una cadena que se relaciona con la tabla de ciudades.
- invoiceId: Un número entero que se relaciona con la tabla de facturas.
- date: La fecha y hora cuando se realizó la orden.
- customerId: Una cadena que se relaciona con la tabla de clientes.
Tabla: ProductOrder (ProductoOrden)
- Descripción: Es una tabla intermedia que relaciona productos con órdenes, mostrando qué productos están en qué orden.
- Columnas:
- id: Una cadena única que identifica cada relación producto-orden.
- productId: Una cadena que se relaciona con la tabla de productos.
- orderId: Una cadena que se relaciona con la tabla de órdenes.
- quantity: La cantidad del producto en la orden.
- price: El precio del producto al momento de la orden.
Tabla: Invoice (Factura)
- Descripción: Almacena la información sobre las facturas de las órdenes.
- Columnas:
- id: Una cadena única que identifica cada factura.
- date: La fecha y hora cuando se generó la factura.
- status: El estado de la factura, que puede ser: PAGADO, PENDIENTE o CANCELADO.
- orderId: Una cadena que se relaciona con la tabla de órdenes.
- customerId: Una cadena que se relaciona con la tabla de clientes.
Paso a paso para crear el esquema
- Crea una tabla llamada "State".
- Añade una columna "id" que será única para cada estado.
- Agrega una columna "name" que almacenará el nombre de cada estado.
- Importa los datos de la tabla State. Puedes encontrar el link a los datos aquí.
- Crea una tabla llamada "City".
- Añade una columna "id" que será única para cada ciudad.
- Agrega una columna "name" para el nombre de la ciudad.
- Añade una columna "stateId" que se relacionará con la tabla "State".
- Establece una relación entre "stateId" en "City" y "id" en "State". Esta relación indica que cada ciudad pertenece a un estado.
- Importa los datos de la tabla City. Puedes encontrar el link a los datos aquí.
- Crea una tabla llamada "Seller".
- Añade una columna "id" que será única para cada vendedor.
- Agrega columnas para "name" y "email". Asegúrate de que el "email" sea único para evitar duplicados.
- Importa los datos de la tabla Seller. Puedes encontrar el link a los datos aquí.
- Crea una tabla llamada "Customer".
- Añade una columna "id" única para cada cliente.
- Agrega columnas para "name", "email" y "address". Asegúrate de que el "email" sea único.
- Importa los datos de la tabla Customer. Puedes encontrar el link a los datos aquí.
- Crea una tabla llamada "Supplier".
- Añade una columna "id" única para cada proveedor.
- Agrega una columna "name".
- Importa los datos de la tabla Supplier. Puedes encontrar el link a los datos aquí.
- Crea una tabla llamada "Category".
- Añade una columna "id" única para cada categoría.
- Agrega una columna "name".
- Importa los datos de la tabla Category. Puedes encontrar el link a los datos aquí.
- Crea una tabla llamada "Product".
- Añade una columna "id" única.
- Agrega columnas para "name" y "price".
- Añade una columna "supplierId" que se relacionará con la tabla "Supplier".
- Establece una relación entre "supplierId" en "Product" y "id" en "Supplier".
- Importa los datos de la tabla Category. Puedes encontrar el link a los datos aquí.
- Crea una tabla llamada "ProductCategory".
- Añade dos columnas: "productId" y "categoryId".
- Establece relaciones para ambas columnas: "productId" se relaciona con "id" en "Product" y "categoryId" se relaciona con "id" en "Category".
- Importa los datos de la tabla Category. Puedes encontrar el link a los datos aquí.
- Crea una tabla llamada "Order".
- Añade las columnas "id", "sellerId", "cityId", "invoiceId" y "date".
- Establece relaciones entre "sellerId" y "id" en "Seller", "cityId" y "id" en "City".
- Importa los datos de la tabla Order. Puedes encontrar el link a los datos aquí.
- Crea una tabla llamada "ProductOrder".
- Añade columnas para "productId", "orderId", "quantity" y "price".
- Establece relaciones para "productId" y "id" en "Product", y "orderId" y "id" en "Order".
- Importa los datos de la tabla Order. Puedes encontrar el link a los datos aquí.
- Crea el tipo "Enum_InvoiceStatus" usando el siguiente código:
CREATE TYPE "Enum_InvoiceStatus" AS ENUM (
'PAID',
'PENDING',
'CANCELED');- Crea una tabla llamada "Invoice".
- Añade las columnas "id", "date", "status", "orderId" y "customerId". Ten presente que la columna "status" debe ser de tipo
Enum_InvoiceStatus. - Establece relaciones entre "orderId" y "id" en "Order", y "customerId" y "id" en "Customer".
- Importa los datos de la tabla Invoice. Puedes encontrar el link a los datos aquí.
Encuentra en este mismo repositorio el código DDL de creación de la base de datos por si tienes alguna duda!
Ejercicios
- Selección Básica
- Listar todos los nombres de productos cuyo precio sea mayor que 100. Prueba tu resultado con productos que realmente cumplan este criterio.
- Mostrar todas las ordenes creadas en 2023.
- Mostrar todas las facturas pendientes.
- Joins
- Listar los nombres de los productos junto con el nombre de su proveedor.
- Mostrar el nombre del cliente y el nombre del vendedor para el pedido con ID "____".
- Listar todos los productos que pertenecen a la categoría "____".
- Obtener el nombre y precio de todos los productos vendidos en el pedido con ID "____".
- Joins con Filtrado
- Listar los nombres de todos los clientes que han hecho un pedido con el vendedor "____".
- Mostrar todos los productos que NO han sido ordenados por ningún cliente.
- Listar las ciudades que tienen al menos 5 pedidos realizados.
- Listar los clientes que tienen facturas pendientes.
- Listar los vendedores con facturas canceladas.
- Mostrar todos los vendedores y el número de pedidos que han manejado, incluyendo aquellos que no han manejado ningún pedido.
- Listar todos los productos y las categorías a las que pertenecen, incluyendo aquellos productos que no tienen categorías asignadas.
- Group By y Funciones Agregadas
- Encontrar el precio promedio, máximo y mínimo de todos los productos.
- Listar cada categoría y el número de productos que tiene.
- Mostrar cada proveedor y el valor total de productos que ha suministrado (precio x cantidad para cada producto).
- Identificar los 5 clientes que han hecho más pedidos.
- Mostrar cada ciudad y el número total de pedidos realizados en ellas.
- Consultas Combinadas
- Para el pedido con ID "____", mostrar el nombre del cliente, el nombre del vendedor, la ciudad y el total del pedido.
- Listar los productos que han sido ordenados más de 50 veces en total.
- Mostrar cada vendedor y su venta total en términos de cantidad de productos vendidos.
- Desafíos Adicionales
- Listar los 3 productos más populares en términos de cantidad total vendida.
- Identificar a los clientes que han gastado más de 1000 en total en sus pedidos.
- Mostrar las ciudades que han generado más ingresos para la tienda.
- Listar los 3 proveedores que más venden en cada estado.
- Encontrar el cliente que ha realizado el pedido más grande en términos de valor total.
- Mostrar la categoría de productos más amplia, es decir, la que tiene la mayor cantidad de productos diferentes.
- Mostrar la categoría de productos más vendida en términos de cantidad.
- Identificar a los vendedores que han hecho ventas en al menos 3 ciudades diferentes.
- Mostrar la cantidad de veces que un producto ha estado involucrado en una factura cancelada.
- Determinar el top 10 de clientes con mayor deuda (verificando que la factura esté pendiente).
- Mostrar los 5 proveedores cuyos productos tienen el precio de venta promedio más alto.
- Identificar a los clientes que han comprado al menos 10 productos diferentes.