En esta actividad vamos a crear una base de datos de un comercio de electrodoméstico y mueblería
1.1. Tabla de Productos
Esta tabla almacena la información sobre cada producto disponible en el comercio.
- productos
producto_id
(INT, PRIMARY KEY, AUTO_INCREMENT): Identificador único del producto.nombre
(VARCHAR(100)): Nombre del producto.descripcion
(TEXT): Descripción del producto.categoria
(VARCHAR(50)): Categoría del producto (por ejemplo, muebles, electrodomésticos).precio
(DECIMAL(10, 2)): Precio del producto.stock
(INT): Cantidad en stock.proveedor_id
(INT, FOREIGN KEY): Identificador del proveedor.fecha_agregado
(DATE): Fecha en que se agregó el producto a la base de datos.
1.2. Tabla de Proveedores
Esta tabla contiene información sobre los proveedores que suministran los productos.
- proveedores
proveedor_id
(INT, PRIMARY KEY, AUTO_INCREMENT): Identificador único del proveedor.nombre
(VARCHAR(100)): Nombre del proveedor.direccion
(VARCHAR(200)): Dirección del proveedor.telefono
(VARCHAR(20)): Número de teléfono del proveedor.email
(VARCHAR(100)): Correo electrónico del proveedor.
1.3. Tabla de Clientes
Esta tabla contiene la información de los clientes que compran productos en el comercio.
- clientes
cliente_id
(INT, PRIMARY KEY, AUTO_INCREMENT): Identificador único del cliente.nombre
(VARCHAR(100)): Nombre del cliente.direccion
(VARCHAR(200)): Dirección del cliente.telefono
(VARCHAR(20)): Número de teléfono del cliente.email
(VARCHAR(100)): Correo electrónico del cliente.
1.4. Tabla de Ventas
Esta tabla registra las ventas realizadas en el comercio.
- ventas
venta_id
(INT, PRIMARY KEY, AUTO_INCREMENT): Identificador único de la venta.cliente_id
(INT, FOREIGN KEY): Identificador del cliente que realizó la compra.fecha
(DATE): Fecha de la venta.total
(DECIMAL(10, 2)): Monto total de la venta.
1.5. Tabla de Detalles de Venta
Esta tabla almacena los detalles de cada venta, incluyendo los productos vendidos.
- detalles_venta
detalle_id
(INT, PRIMARY KEY, AUTO_INCREMENT): Identificador único del detalle de la venta.venta_id
(INT, FOREIGN KEY): Identificador de la venta.producto_id
(INT, FOREIGN KEY): Identificador del producto vendido.cantidad
(INT): Cantidad de producto vendido.precio_unitario
(DECIMAL(10, 2)): Precio unitario del producto al momento de la venta.subtotal
(DECIMAL(10, 2)): Subtotal para este producto (cantidad * precio_unitario).
1.6. Tabla de Procedimientos
Esta tabla almacena los procedimientos internos del comercio.
- procedimientos
procedimiento_id
(INT, PRIMARY KEY, AUTO_INCREMENT): Identificador único del procedimiento.nombre
(VARCHAR(100)): Nombre del procedimiento.descripcion
(TEXT): Descripción detallada del procedimiento.fecha_actualizacion
(DATE): Fecha de la última actualización del procedimiento.
2. Relaciones entre Tablas
- productos y proveedores: La relación es de muchos a uno. Cada producto está asociado con un proveedor.
- ventas y clientes: La relación es de muchos a uno. Cada venta está asociada con un cliente.
- detalles_venta y ventas: La relación es de muchos a uno. Cada detalle de venta está asociado con una venta.
- detalles_venta y productos: La relación es de muchos a uno. Cada detalle de venta está asociado con un producto.
3. Ejemplo de Consultas SQL
Agregar un nuevo producto
INSERT INTO productos (nombre, descripcion, categoria, precio, stock, proveedor_id, fecha_agregado)
VALUES ('Sofá de Cuero', 'Sofá de cuero de 3 plazas', 'muebles', 45000.00, 10, 1, '2024-08-09');
Registrar una venta
INSERT INTO ventas (cliente_id, fecha, total)
VALUES (1, '2024-08-09', 150000.00);
Agregar detalles de venta
INSERT INTO detalles_venta (venta_id, producto_id, cantidad, precio_unitario, subtotal)
VALUES (1, 1, 2, 45000.00, 90000.00);
Actualizar stock después de una venta
UPDATE productos
SET stock = stock - 2
WHERE producto_id = 1;
Obtener información de ventas de un cliente específico
SELECT v.venta_id, v.fecha, v.totalFROM ventas v
JOIN clientes c ON v.cliente_id = c.cliente_id
WHERE c.nombre = 'Juan Pérez';
-- Creación de la base de datos
CREATE DATABASE IF NOT EXISTS comercio;
USE comercio;
-- Tabla de Proveedores
CREATE TABLE proveedores (
proveedor_id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
direccion VARCHAR(200),
telefono VARCHAR(20),
email VARCHAR(100)
);
-- Tabla de Productos
CREATE TABLE productos (
producto_id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
descripcion TEXT,
categoria VARCHAR(50),
precio DECIMAL(10, 2) NOT NULL,
stock INT NOT NULL,
proveedor_id INT,
fecha_agregado DATE,
FOREIGN KEY (proveedor_id) REFERENCES proveedores(proveedor_id)
);
-- Tabla de Clientes
CREATE TABLE clientes (
cliente_id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
direccion VARCHAR(200),
telefono VARCHAR(20),
email VARCHAR(100)
);
-- Tabla de Ventas
CREATE TABLE ventas (
venta_id INT AUTO_INCREMENT PRIMARY KEY,
cliente_id INT,
fecha DATE NOT NULL,
total DECIMAL(10, 2) NOT NULL,
FOREIGN KEY (cliente_id) REFERENCES clientes(cliente_id)
);
-- Tabla de Detalles de Venta
CREATE TABLE detalles_venta (
detalle_id INT AUTO_INCREMENT PRIMARY KEY,
venta_id INT,
producto_id INT,
cantidad INT NOT NULL,
precio_unitario DECIMAL(10, 2) NOT NULL,
subtotal DECIMAL(10, 2) NOT NULL,
FOREIGN KEY (venta_id) REFERENCES ventas(venta_id),
FOREIGN KEY (producto_id) REFERENCES productos(producto_id)
);
-- Tabla de Procedimientos
CREATE TABLE procedimientos (
procedimiento_id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
descripcion TEXT,
fecha_actualizacion DATE
);