Practica de Introducción a base de datos
-- Crear base de datos
CREATE DATABASE EmpresaAlimentos;
-- Usar la base de datos
USE EmpresaAlimentos;
-- Crear tablas
CREATE TABLE Cliente (
ClienteID INT PRIMARY KEY IDENTITY,
Nombre VARCHAR(100),
Dirección VARCHAR(200),
Teléfono VARCHAR(20),
CorreoElectrónico VARCHAR(100)
);
CREATE TABLE Proveedor (
ProveedorID INT PRIMARY KEY IDENTITY,
Nombre VARCHAR(100),
Dirección VARCHAR(200),
Teléfono VARCHAR(20),
CorreoElectrónico VARCHAR(100)
);
CREATE TABLE Producto (
ProductoID INT PRIMARY KEY IDENTITY,
Nombre VARCHAR(100),
Descripción TEXT,
Precio DECIMAL(18, 2),
Stock INT,
ProveedorID INT,
FOREIGN KEY (ProveedorID) REFERENCES Proveedor(ProveedorID)
);
CREATE TABLE Categoría (
CategoríaID INT PRIMARY KEY IDENTITY,
Nombre VARCHAR(100),
Descripción TEXT
);
CREATE TABLE ProductoCategoría (
ProductoID INT,
CategoríaID INT,
PRIMARY KEY (ProductoID, CategoríaID),
FOREIGN KEY (ProductoID) REFERENCES Producto(ProductoID),
FOREIGN KEY (CategoríaID) REFERENCES Categoría(CategoríaID)
);
CREATE TABLE Empleado (
EmpleadoID INT PRIMARY KEY IDENTITY,
Nombre VARCHAR(100),
Puesto VARCHAR(100),
Teléfono VARCHAR(20),
CorreoElectrónico VARCHAR(100),
Salario DECIMAL(18, 2)
);
CREATE TABLE Venta (
VentaID INT PRIMARY KEY IDENTITY,
Fecha DATETIME,
ClienteID INT,
EmpleadoID INT,
Total DECIMAL(18, 2),
FOREIGN KEY (ClienteID) REFERENCES Cliente(ClienteID),
FOREIGN KEY (EmpleadoID) REFERENCES Empleado(EmpleadoID)
);
CREATE TABLE DetalleVenta (
DetalleVentaID INT PRIMARY KEY IDENTITY,
VentaID INT,
ProductoID INT,
Cantidad INT,
PrecioUnitario DECIMAL(18, 2),
Subtotal AS (Cantidad * PrecioUnitario) PERSISTED,
FOREIGN KEY (VentaID) REFERENCES Venta(VentaID),
FOREIGN KEY (ProductoID) REFERENCES Producto(ProductoID)
);
CREATE TABLE ProveedorProducto (
ProveedorID INT,
ProductoID INT,
PRIMARY KEY (ProveedorID, ProductoID),
FOREIGN KEY (ProveedorID) REFERENCES Proveedor(ProveedorID),
FOREIGN KEY (ProductoID) REFERENCES Producto(ProductoID)
);
CREATE TABLE Almacén (
AlmacénID INT PRIMARY KEY IDENTITY,
Nombre VARCHAR(100),
Dirección VARCHAR(200),
Capacidad INT
);
-- Tabla intermedia para gestionar inventario en almacenes (opcional)
CREATE TABLE AlmacénProducto (
AlmacénID INT,
ProductoID INT,
Cantidad INT,
PRIMARY KEY (AlmacénID, ProductoID),
FOREIGN KEY (AlmacénID) REFERENCES Almacén(AlmacénID),
FOREIGN KEY (ProductoID) REFERENCES Producto(ProductoID)
);
Para introducir
y consultar datos en las tablas de tu base de datos, aquí tienes ejemplos de
cómo hacerlo en SQL. Utilizaré SQL Server para estos ejemplos, pero la sintaxis
básica debería ser similar en otros sistemas de gestión de bases de datos como MySQL
o PostgreSQL, aunque podrían tener ligeras diferencias.
Insertar Datos
1. Insertar
datos en la tabla Cliente:
INSERT INTO Cliente (Nombre, Dirección,
Teléfono, CorreoElectrónico)
VALUES ('Juan Pérez', 'Calle Falsa
123', '555-1234', 'juan.perez@example.com');
2. Insertar
datos en la tabla Proveedor:
INSERT INTO Proveedor (Nombre,
Dirección, Teléfono, CorreoElectrónico)
VALUES ('Proveedores S.A.', 'Avenida
Central 456', '555-5678', 'contacto@proveedores.com');
3. Insertar
datos en la tabla Producto:
INSERT INTO Producto (Nombre,
Descripción, Precio, Stock, ProveedorID)
VALUES ('Harina de Trigo', 'Harina de
trigo para panificación', 1.50, 100, 1);
4. Insertar
datos en la tabla Categoría:
INSERT INTO Categoría (Nombre,
Descripción)
VALUES ('Granos', 'Productos derivados
de granos');
5. Insertar
datos en la tabla ProductoCategoría:
INSERT INTO ProductoCategoría
(ProductoID, CategoríaID)
VALUES (1, 1);
6. Insertar
datos en la tabla Empleado:
INSERT INTO Empleado (Nombre, Puesto,
Teléfono, CorreoElectrónico, Salario)
VALUES ('Ana Gómez', 'Vendedora',
'555-8765', 'ana.gomez@example.com', 2500.00);
7. Insertar
datos en la tabla Venta:
INSERT INTO Venta (Fecha, ClienteID,
EmpleadoID, Total)
VALUES ('2024-08-01 10:00:00', 1, 1,
10.00);
8. Insertar
datos en la tabla DetalleVenta:
INSERT INTO DetalleVenta (VentaID,
ProductoID, Cantidad, PrecioUnitario)
VALUES (1, 1, 5, 1.50);
9. Insertar
datos en la tabla ProveedorProducto:
INSERT INTO ProveedorProducto
(ProveedorID, ProductoID)
VALUES (1, 1);
10. Insertar
datos en la tabla Almacén:
INSERT INTO Almacén (Nombre, Dirección,
Capacidad)
VALUES ('Almacén Central', 'Calle
Principal 789', 1000);
11. Insertar
datos en la tabla AlmacénProducto:
INSERT INTO AlmacénProducto (AlmacénID,
ProductoID, Cantidad)
VALUES (1, 1, 100);
Consultar Datos
1. Consultar
todos los clientes:
SELECT * FROM Cliente;
2. Consultar
todos los proveedores:
SELECT * FROM Proveedor;
3. Consultar
todos los productos:
SELECT * FROM Producto;
4. Consultar
todos los productos en una categoría específica:
SELECT p.*
FROM Producto p
JOIN ProductoCategoría pc ON p.ProductoID =
pc.ProductoID
WHERE pc.CategoríaID = 1;
-- Suponiendo que quieres consultar la
categoría con ID 1
5. Consultar
todas las ventas de un cliente específico:
SELECT v.*
FROM Venta v
WHERE v.ClienteID = 1;
-- Suponiendo que quieres consultar las
ventas del cliente con ID 1
6. Consultar
detalles de una venta específica:
SELECT dv.*, p.Nombre AS ProductoNombre
FROM DetalleVenta dv
JOIN Producto p ON dv.ProductoID = p.ProductoID
WHERE dv.VentaID = 1;
-- Suponiendo que quieres consultar los
detalles de la venta con ID 1
7. Consultar el
inventario en un almacén específico:
SELECT ap.*, p.Nombre AS ProductoNombre
FROM AlmacénProducto ap
JOIN Producto p ON ap.ProductoID = p.ProductoID
WHERE ap.AlmacénID = 1;
-- Suponiendo que quieres consultar el
inventario del almacén con ID 1
8. Consultar
los proveedores que suministran un producto específico:
SELECT pr.*
FROM Proveedor pr
JOIN ProveedorProducto pp ON pr.ProveedorID =
pp.ProveedorID
WHERE pp.ProductoID = 1;
-- Suponiendo que quieres consultar los
proveedores del producto con ID 1
Insertar Datos en la Tabla Cliente
INSERT
INTO Cliente (Nombre, Dirección, Teléfono, CorreoElectrónico)
VALUES
(
'Juan Pérez',
'Calle Falsa 123',
'555-1234',
'juan.perez@example.com'),
(
'Ana Gómez',
'Calle Verdadera 456',
'555-2345',
'ana.gomez@example.com'),
(
'Carlos Ruiz',
'Avenida de la Reforma 789',
'555-3456',
'carlos.ruiz@example.com'),
(
'María Fernández',
'Calle del Sol 101',
'555-4567',
'maria.fernandez@example.com'),
(
'Laura Martínez',
'Calle del Norte 202',
'555-5678',
'laura.martinez@example.com'),
(
'Jorge López',
'Calle del Este 303',
'555-6789',
'jorge.lopez@example.com'),
(
'Marta Sánchez',
'Calle del Oeste 404',
'555-7890',
'marta.sanchez@example.com'),
(
'Pedro García',
'Calle del Centro 505',
'555-8901',
'pedro.garcia@example.com'),
(
'Lucía Morales',
'Calle de la Luna 606',
'555-9012',
'lucia.morales@example.com'),
(
'David González',
'Calle de la Estrella 707',
'555-0123',
'david.gonzalez@example.com');
Insertar Datos en la Tabla Proveedor
INSERT
INTO Proveedor (Nombre, Dirección, Teléfono, CorreoElectrónico)
VALUES
(
'Proveedores S.A.',
'Avenida Central 456',
'555-5678',
'contacto@proveedores.com'),
(
'Distribuciones ABC',
'Calle de la Industria 123',
'555-6789',
'info@abc.com'),
(
'Suministros XYZ',
'Avenida del Comercio 234',
'555-7890',
'ventas@xyz.com'),
(
'Fabrica de Harinas',
'Calle Panadera 345',
'555-8901',
'harinas@fabrica.com'),
(
'Alimentos Globales',
'Calle Mayor 456',
'555-9012',
'globales@alimentos.com');
Insertar Datos en la Tabla Categoría
INSERT
INTO Categoría (Nombre, Descripción)
VALUES
(
'Granos',
'Productos derivados de granos'),
(
'Lácteos',
'Productos lácteos y derivados'),
(
'Bebidas',
'Bebidas alcohólicas y no alcohólicas'),
(
'Carnes',
'Carnes y productos cárnicos'),
(
'Vegetales',
'Vegetales y frutas frescas');
Insertar Datos en la Tabla Producto
INSERT
INTO Producto (Nombre, Descripción, Precio, Stock, ProveedorID)
VALUES
(
'Harina de Trigo',
'Harina de trigo para panificación',
1.50,
100,
1),
(
'Leche Entera',
'Leche entera pasteurizada',
0.90,
200,
2),
(
'Jugo de Naranja',
'Jugo natural de naranja',
2.00,
150,
3),
(
'Pechuga de Pollo',
'Pechuga de pollo fresca',
5.00,
50,
4),
(
'Manzanas',
'Manzanas frescas de calidad',
1.20,
80,
5),
(
'Pan Integral',
'Pan integral recién horneado',
1.80,
60,
1),
(
'Queso Cheddar',
'Queso cheddar en bloque',
3.50,
40,
2),
(
'Cerveza Artesanal',
'Cerveza artesanal de elaboración local',
4.00,
70,
3),
(
'Carne de Res',
'Carne de res para asado',
6.00,
30,
4),
(
'Zanahorias',
'Zanahorias frescas y crujientes',
0.80,
90,
5);
Insertar Datos en la Tabla ProductoCategoría
INSERT
INTO ProductoCategoría (ProductoID, CategoríaID)
VALUES
(
1,
1),
(
2,
2),
(
3,
3),
(
4,
4),
(
5,
5),
(
6,
1),
(
7,
2),
(
8,
3),
(
9,
4),
(
10,
5);
Insertar Datos en la Tabla Empleado
INSERT
INTO Empleado (Nombre, Puesto, Teléfono, CorreoElectrónico, Salario)
VALUES
(
'Ana Gómez',
'Vendedora',
'555-8765',
'ana.gomez@example.com',
2500.00),
(
'Luis Fernández',
'Cajero',
'555-9876',
'luis.fernandez@example.com',
2200.00),
(
'Sofía Martínez',
'Gerente',
'555-6543',
'sofia.martinez@example.com',
3500.00),
(
'Raúl Pérez',
'Supervisor',
'555-3210',
'raul.perez@example.com',
3000.00),
(
'Isabel López',
'Repartidor',
'555-4568',
'isabel.lopez@example.com',
2000.00');
Insertar Datos en la Tabla Venta
INSERT
INTO Venta (Fecha, ClienteID, EmpleadoID, Total)
VALUES
(
'2024-08-01 10:00:00',
1,
1,
10.00),
(
'2024-08-01 11:00:00',
2,
2,
15.00),
(
'2024-08-02 09:30:00',
3,
3,
20.00),
(
'2024-08-02 14:00:00',
4,
4,
25.00),
(
'2024-08-03 16:00:00',
5,
5,
30.00');
Insertar Datos en la Tabla DetalleVenta
INSERT
INTO DetalleVenta (VentaID, ProductoID, Cantidad, PrecioUnitario)
VALUES
(
1,
1,
5,
1.50),
(
1,
2,
2,
0.90),
(
2,
3,
6,
2.00),
(
2,
4,
3,
5.00),
(
3,
5,
4,
1.20),
(
3,
6,
2,
1.80),
(
4,
7,
1,
3.50),
(
4,
8,
3,
4.00),
(
5,
9,
2,
6.00),
(
5,
10,
5,
0.80);
Insertar Datos en la Tabla ProveedorProducto
INSERT
INTO ProveedorProducto (ProveedorID, ProductoID)
VALUES
(
1,
1),
(
2,
2),
(
3,
3),
(
4,
4),
(
5,
5),
(
1,
6),
(
2,
7),
(
3,
8),
(
4,
9),
(
5,
10);
Insertar Datos en la Tabla Almacén
INSERT
INTO Almacén (Nombre, Dirección, Capacidad)
VALUES
(
'Almacén Central',
'Calle Principal 789',
1000),
(
'Almacén Norte',
'Avenida del Norte 100',
800),
(
'Almacén Sur',
'Calle del Sur 200',
600);
Insertar Datos en la Tabla AlmacénProducto
INSERT
INTO AlmacénProducto (AlmacénID, ProductoID, Cantidad)
VALUES
(
1,
1,
100),
(
1,
2,
200),
(
2,
3,
150),
(
2,
4,
50),
(
3,
5,
80),
(
3,
6,
60),
(
1,
7,
40),
(
1,
8,
70),
(
2,
9,
30),
(
3,
10,
90);