Skip to content
Este artículo tiene fines educativos. Te animamos a verificar con fuentes oficiales.

¿Cómo diseño la base de datos para mi tienda de colmado en Santo Domingo?

@YanibelSantiago · · answered
#bases de datos#informática#bachillerato#Pruebas Nacionales

Tengo que hacer un proyecto para la escuela sobre bases de datos. Mi idea es crear un sistema para llevar el inventario de un colmado típico dominicano. Pero no sé por dónde empezar. ¿Me pueden explicar paso a paso cómo diseñar la base de datos sin complicarme la vida? Incluir ejemplos con productos como arroz, habichuelas y cerveza Presidente.

@YanibelSantiago student ·

Tengo que hacer un proyecto para la escuela sobre bases de datos. Mi idea es crear un sistema para llevar el inventario de un colmado típico dominicano. Pero no sé por dónde empezar. ¿Me pueden explicar paso a paso cómo diseñar la base de datos sin complicarme la vida? Incluir ejemplos con productos como arroz, habichuelas y cerveza Presidente.

@Jatniel student ·
@YanibelSantiago a dit: Tengo que hacer un proyecto...

¡Buena idea! Yo hice algo similar el año pasado. Primero necesitas definir qué datos vas a guardar: nombre del producto, precio, cantidad en stock... Pero no sé cómo organizarlo en tablas.

@LilianaRD student ·
@YanibelSantiago a dit: Tengo que hacer un proyecto...

¿Y si incluyes también los proveedores? En mi colmado favorito en Santiago siempre llegan los mismos. Eso sería útil para el proyecto.

@ProfMendoza teacher ·
@YanibelSantiago a dit: Tengo que hacer un proyecto...

¡Excelente pregunta, @YanibelSantiago! Vamos por pasos. Primero haz una lista de lo que necesitas guardar: productos (producto ParseError: Unexpected character: '' at position 1: ̲TAG0), proveedores (proveedor ParseError: Unexpected character: '' at position 1: ̲TAG1), y ventas (venta ParseError: Unexpected character: '' at position 1: ̲TAG2). Luego diseña tablas separadas para cada entidad. Por ejemplo, la tabla productos debe tener id_producto ParseError: Unexpected character: '' at position 1: ̲TAG3 (clave primaria), nombre, precio_unitario, y cantidad_actual. ¿Ves cómo esto evita duplicar datos?

idproductoINTPRIMARYKEYAUTOINCREMENT
@DevJuanRD expert ·
@ProfMendoza a dit: ¡Excelente pregunta...

¡Exacto! Para conectar productos con proveedores, usa una clave foránea. Por ejemplo, en la tabla productos añade id_proveedor ParseError: Unexpected character: '' at position 1: ̲TAG0 que apunte a la tabla proveedores. Así cada producto sabe de dónde viene. Aquí tienes un ejemplo rápido:

CREATE TABLE proveedores (
    id_proveedor INT PRIMARY KEY AUTO_INCREMENT,
    nombre VARCHAR(50) NOT NULL,
    telefono VARCHAR(15)
);

CREATE TABLE productos (
    id_producto INT PRIMARY KEY AUTO_INCREMENT,
    nombre VARCHAR(50) NOT NULL,
    precio_unitario DECIMAL(10,2),
    cantidad_actual INT,
    id_proveedor INT,
    FOREIGN KEY (id_proveedor) REFERENCES proveedores(id_proveedor)
);

@DudaTecno student ·
@DevJuanRD a dit: ¡Exacto! Para conectar productos...

Pero ¿y si un mismo producto lo venden varios proveedores? Por ejemplo, la cerveza Presidente puede venir de Brahma o de un distribuidor local.

@ProfeLópez teacher ·
@DudaTecno a dit: Pero ¿y si un mismo producto...

¡Muy buena observación, @DudaTecno! Ahí entra la primera forma normal. No puedes repetir el mismo producto en la tabla productos. La solución es crear una tabla intermedia llamada producto_proveedor ParseError: Unexpected character: '' at position 1: ̲TAG0 con dos claves foráneas: id_producto ParseError: Unexpected character: '' at position 1: ̲TAG1 y id_proveedor ParseError: Unexpected character: '' at position 1: ̲TAG2. Así manejas la relación muchos a muchos. Ejemplo:

CREATE TABLE producto_proveedor (
    id_producto INT,
    id_proveedor INT,
    precio_compra DECIMAL(10,2),
    PRIMARY KEY (id_producto, id_proveedor),
    FOREIGN KEY (id_producto) REFERENCES productos(id_producto),
    FOREIGN KEY (id_proveedor) REFERENCES proveedores(id_proveedor)
);

@ChisteTecno joke ·
@ProfeLópez a dit: ¡Muy buena observación...

Entonces si pongo 'arroz' 10 veces en la tabla productos, ¿el colmado se llena de arroz mágico? 😂

@YanibelSantiago student ·
@YanibelSantiago a dit: Tengo que hacer un proyecto...

¡Gracias! Ya entiendo mejor. Pero ¿cómo hago para que cuando venda una cerveza Presidente, se actualice automáticamente la cantidad en stock?

@Jatniel student ·
@YanibelSantiago a dit: ¡Gracias! Ya entiendo mejor...

¡Eso es con un trigger! Cuando insertes una venta en la tabla ventas, resta la cantidad vendida de la tabla productos. Pero no sé cómo escribirlo en SQL.

@LilianaRD student ·
@Jatniel a dit: ¡Eso es con un trigger...

¿Y si quiero saber cuál es el producto más vendido? ¿Cómo lo hago en una consulta?

@ProfMendoza teacher ·
@LilianaRD a dit: ¿Y si quiero saber cuál es el producto...

¡Perfecto momento para hablar de consultas! Para saber el producto más vendido, agrupa las ventas por producto y suma las cantidades:

SELECT p.nombre, SUM(v.cantidad) AS total_vendido
FROM ventas v
JOIN productos p ON v.id_producto = p.id_producto
GROUP BY p.nombre
ORDER BY total_vendido DESC
LIMIT 1;

Así ves cuál es el rey del colmado. ¿Ves cómo las relaciones entre tablas te dan poder?

@DevJuanRD expert ·
@ProfMendoza a dit: ¡Perfecto momento para hablar de consultas!

Para el trigger de actualizar stock, aquí tienes el código:

DELIMITER //
CREATE TRIGGER actualizar_stock AFTER INSERT ON ventas
FOR EACH ROW
BEGIN
    UPDATE productos SET cantidad_actual = cantidad_actual - NEW.cantidad
    WHERE id_producto = NEW.id_producto;
END//
DELIMITER ;

Así cada vez que registres una venta, el stock baja automáticamente. ¡Magia de las bases de datos!

@DudaTecno student ·
@YanibelSantiago a dit: Tengo que hacer un proyecto...

¿Y si me piden en el examen diseñar una base de datos para un sistema de reservas de hotel? ¿Cómo adapto lo que aprendí aquí?

@ProfeLópez teacher ·
@DudaTecno a dit: ¿Y si me piden en el examen...

¡Buena pregunta, @DudaTecno! La lógica es similar: identifica entidades (habitaciones, clientes, reservas), define claves primarias y foráneas, aplica formas normales, y diseña consultas útiles. Por ejemplo, para reservas necesitarías una tabla habitaciones con id_habitacion ParseError: Unexpected character: '' at position 1: ̲TAG0, tipo, precio_noche, y una tabla reservas con fechas. La clave es separar lo que se repite (clientes) de lo que cambia (reservas). ¡Practica con casos de Pruebas Nacionales!

idhabitacionINTPRIMARYKEY
@ChisteTecno joke ·
@ProfeLópez a dit: ¡Buena pregunta...

Entonces si diseño mal la base de datos del hotel, ¿termino con clientes durmiendo en el baño? 🚪😴

@YanibelSantiago student ·
@YanibelSantiago a dit: Tengo que hacer un proyecto...

¡Muchas gracias a todos! Ya tengo una idea clara. Voy a practicar con el ejemplo del colmado y luego adapto para mi proyecto.

@Jatniel student ·
@YanibelSantiago a dit: ¡Muchas gracias a todos!

Oye @YanibelSantiago, ¿me pasas tu diseño cuando lo termines? Quiero comparar con el mío.

@DevJuanRD expert ·
@Jatniel a dit: Oye @YanibelSantiago...

¡Importante! Cuando diseñes tu base de datos para el proyecto, recuerda estos errores comunes que veo en Pruebas Nacionales: 1. No usar claves primarias únicas 2. Repetir datos en lugar de usar relaciones 3. Olvidar definir NOT NULL en campos críticos 4. No aplicar al menos la primera forma normal Si evitas estos, vas por buen camino. ¡Mucho éxito!

@LilianaRD student ·
@DevJuanRD a dit: ¡Importante! Cuando diseñes tu base...

¿Y si quiero guardar la foto del producto? ¿Cómo lo hago en la base de datos?

@ProfeLópez teacher · Mejor respuesta
@LilianaRD a dit: ¿Y si quiero guardar la foto...

¡Buena pregunta, @LilianaRD! Para guardar imágenes, no las metas directamente en la tabla productos. En su lugar, guarda solo el nombre del archivo en la base de datos (ej: 'arroz_5kg.jpg') y sube la foto a una carpeta en tu servidor. Así la tabla productos tendría un campo ruta_imagen ParseError: Unexpected character: '' at position 1: ̲TAG0 VARCHAR(100). Esto evita que la base de datos se llene de datos binarios y sea más eficiente.

rutaimagenVARCHAR(100)
@ChisteTecno joke ·
@ProfeLópez a dit: ¡Buena pregunta...

Entonces si borro la foto del servidor, ¿el arroz desaparece del inventario? 🍚💨

@DudaTecno student ·
@ProfeLópez a dit: ¡Buena pregunta...

¡Gracias profe! Esto me aclaró todo. Voy a repasar las formas normales y practicar con consultas.

@ProfMendoza teacher ·
@DudaTecno a dit: ¡Gracias profe! Esto me aclaró todo.

¡Perfecto, @DudaTecno! Recuerda que en Pruebas Nacionales suelen pedirte: - Diseñar el esquema de una base de datos simple - Escribir 2-3 consultas SQL - Explicar por qué usaste ciertas claves Con lo que aprendiste hoy, estás listo. ¡Y si tienes dudas, vuelve a preguntar!

@YanibelSantiago student ·

¡Gracias a todos por la ayuda! Ahora sé por dónde empezar. ¡A diseñar mi base de datos del colmado!

Fuentes

  1. en.wikipedia.org
  2. doi.org
  3. web.archive.org
  4. www.utexas.edu
  5. www.informit.com
  6. www.sqlteam.com
  7. support.office.com
  8. databases.about.com
  9. www.databasejournal.com
  10. dev.mysql.com