TALLER:
Modelado y Construcción de Bases de
Datos Relacionales
En cada uno de los siguientes puntos se presenta un caso empresarial independiente.
Para cada caso el estudiante debe realizar:
Análisis del escenario
Elaboración del diagrama de base de datos
Creación del script SQL (DDL) correspondiente
PUNTO 1 — Clínica Veterinaria
Enunciado ampliado:
La clínica veterinaria VetSalud, ubicada en el sector urbano de la ciudad, presta servicios
médicos a mascotas de diferentes especies, entre las cuales se encuentran perros, gatos,
aves, reptiles y pequeños mamíferos. Debido al aumento de la demanda y al crecimiento del
archivo clínico, la administración ha identificado la necesidad de implementar un sistema
que permita registrar y gestionar toda la información relacionada con las atenciones.
El sistema debe permitir almacenar los datos de los propietarios de las mascotas,
incluyendo su identificación, datos de contacto y otros datos necesarios para el seguimiento
administrativo. Cada propietario puede tener una o varias mascotas bajo su responsabilidad.
Asimismo, se requiere registrar información clínica y descriptiva de las mascotas
atendidas, tales como nombre, especie, raza, edad y cualquier otro dato relevante para la
atención veterinaria.
Cada vez que una mascota asiste a la clínica, se genera una visita veterinaria, donde se
registra la fecha, el motivo de consulta, la enfermedad diagnosticada (si aplica) y las
observaciones del profesional. La clínica cuenta con varios veterinarios, cada uno con
identificación profesional y especialidades, por lo que cada visita debe quedar asociada al
veterinario que la atendió.
Finalmente, durante una visita pueden realizarse uno o varios tratamientos, como
vacunación, desparasitación, curaciones o procedimientos menores. El sistema debe
registrar el tratamiento, su descripción y el vínculo con la visita correspondiente.
PUNTO 2 — Tienda de Ropa
Enunciado ampliado:
La tienda de moda ModaCity comercializa prendas de vestir para todo tipo de público.
Actualmente la tienda realiza el control de inventario y ventas de forma manual, lo que ha
generado inconsistencias en los registros de productos y una baja capacidad para analizar
información comercial.
Con el fin de mejorar sus procesos internos, la tienda requiere un sistema que permita
administrar la información relacionada con los productos en inventario, incluyendo datos
como tipo de prenda, talla, género, color, precio y stock disponible. Cada producto debe
pertenecer a una categoría (por ejemplo: camisetas, pantalones, zapatillas, accesorios, etc),
con el fin de facilitar la gestión y el análisis de inventario.
Los productos provienen de diferentes proveedores, por lo que el sistema debe almacenar
información sobre ellos, como razón social, tipo de proveedor, contacto y condiciones
comerciales.
Adicionalmente, la tienda realiza ventas a clientes en el punto físico. Una venta puede
incluir uno o varios productos, y debe registrar fecha, monto total y los productos vendidos
con su cantidad correspondiente. Este historial permitirá a la tienda llevar un mejor control
de inventario y analizar tendencias de consumo.
PUNTO 3 — Biblioteca Escolar
Enunciado ampliado:
La biblioteca de la institución educativa Colegio Futuro Digital administra el préstamo de
libros a los estudiantes del plantel. Debido al crecimiento del catálogo literario y al
incremento en la frecuencia de préstamos, la biblioteca requiere la implementación de un
sistema de información que permita llevar un control adecuado.
El sistema debe registrar información de los estudiantes, incluyendo identificación, grado
académico y datos de contacto. El catálogo literario está compuesto por diversos libros, los
cuales poseen datos como título, género, año de publicación y editorial. Muchos libros
poseen más de un autor, por lo que el sistema debe ser capaz de gestionar esta relación
adecuadamente.
Los estudiantes pueden solicitar préstamos, los cuales deben quedar registrados con su
fecha de inicio y fecha de devolución prevista. Cada préstamo debe asociarse a un libro
específico, y el sistema debe permitir conocer cuáles libros están prestados y cuáles están
disponibles, la biblioteca también desea mantener información de los autores, incluyendo
nombre, país de origen y datos biográficos básicos, de modo que pueda generar consultas
bibliográficas y reportes académicos.
SOLUCION
PUNTO 1 — Clínica Veterinaria
1.1 — Entidades y Relaciones
Entidades:
Propietario
Mascota
Veterinario
Visita
Tratamiento
Relaciones:
Un propietario → tiene → muchas mascotas (1:N)
Una mascota → tiene → muchas visitas (1:N)
Una visita → es atendida por → un veterinario (N:1)
Una visita → incluye → varios tratamientos (1:N)
1.2 — Diagrama Lógico (Descripción Estructural)
Propietario (1) ── (N) Mascota (1) ── (N) Visita (N) ── (1) Veterinario
|
(1)
Tratamiento
1.3 — SQL (DDL)
CREATE TABLE Propietario (
idPropietario INT PRIMARY KEY AUTO_INCREMENT,
nombre VARCHAR(80) NOT NULL,
telefono VARCHAR(30),
email VARCHAR(100)
);
CREATE TABLE Mascota (
idMascota INT PRIMARY KEY AUTO_INCREMENT,
nombre VARCHAR(60) NOT NULL,
especie VARCHAR(40),
raza VARCHAR(40),
edad INT,
idPropietario INT NOT NULL,
FOREIGN KEY (idPropietario) REFERENCES Propietario(idPropietario)
);
CREATE TABLE Veterinario (
idVeterinario INT PRIMARY KEY AUTO_INCREMENT,
nombre VARCHAR(80) NOT NULL,
especialidad VARCHAR(100)
);
CREATE TABLE Visita (
idVisita INT PRIMARY KEY AUTO_INCREMENT,
fecha DATE NOT NULL,
motivo VARCHAR(200),
diagnostico VARCHAR(200),
idMascota INT NOT NULL,
idVeterinario INT NOT NULL,
FOREIGN KEY (idMascota) REFERENCES Mascota(idMascota),
FOREIGN KEY (idVeterinario) REFERENCES Veterinario(idVeterinario)
);
CREATE TABLE Tratamiento (
idTratamiento INT PRIMARY KEY AUTO_INCREMENT,
descripcion VARCHAR(200),
idVisita INT NOT NULL,
FOREIGN KEY (idVisita) REFERENCES Visita(idVisita)
);
PUNTO 2 — Tienda de Ropa
2.1 — Entidades y Relaciones
Entidades:
Categoría
Producto
Proveedor
Venta
DetalleVenta
Relaciones:
Categoría (1:N) Producto
Proveedor (1:N) Producto
Venta (1:N) DetalleVenta
Producto (1:N) DetalleVenta
2.2 — Diagrama Lógico
Categoria (1) ── (N) Producto (N) ── (N) DetalleVenta (N) ── (1) Venta
|
(N)
Proveedor
2.3 — SQL (DDL)
CREATE TABLE Categoria (
idCategoria INT PRIMARY KEY AUTO_INCREMENT,
nombre VARCHAR(60) NOT NULL
);
CREATE TABLE Proveedor (
idProveedor INT PRIMARY KEY AUTO_INCREMENT,
nombre VARCHAR(100) NOT NULL,
contacto VARCHAR(100)
);
CREATE TABLE Producto (
idProducto INT PRIMARY KEY AUTO_INCREMENT,
nombre VARCHAR(80) NOT NULL,
talla VARCHAR(10),
genero VARCHAR(20),
color VARCHAR(30),
precio DECIMAL(10,2),
stock INT,
idCategoria INT NOT NULL,
idProveedor INT NOT NULL,
FOREIGN KEY (idCategoria) REFERENCES Categoria(idCategoria),
FOREIGN KEY (idProveedor) REFERENCES Proveedor(idProveedor)
);
CREATE TABLE Venta (
idVenta INT PRIMARY KEY AUTO_INCREMENT,
fecha DATE NOT NULL,
total DECIMAL(10,2)
);
CREATE TABLE DetalleVenta (
idVenta INT NOT NULL,
idProducto INT NOT NULL,
cantidad INT NOT NULL,
precioUnitario DECIMAL(10,2) NOT NULL,
PRIMARY KEY (idVenta, idProducto),
FOREIGN KEY (idVenta) REFERENCES Venta(idVenta),
FOREIGN KEY (idProducto) REFERENCES Producto(idProducto)
);
PUNTO 3 — Biblioteca Escolar
3.1 — Entidades y Relaciones
Entidades:
Estudiante
Libro
Autor
LibroAutor (tabla puente)
Prestamo
Relaciones:
Libro (N:M) Autor → mediante LibroAutor
Estudiante (1:N) Prestamo
Libro (1:N) Prestamo
3.2 — Diagrama Lógico
Autor (N) ── (N) LibroAutor (N) ── (1) Libro (1) ── (N) Prestamo (N) ──
(1) Estudiante
3.3 — SQL (DDL)
CREATE TABLE Estudiante (
idEstudiante INT PRIMARY KEY AUTO_INCREMENT,
nombre VARCHAR(80) NOT NULL,
grado VARCHAR(20)
);
CREATE TABLE Libro (
idLibro INT PRIMARY KEY AUTO_INCREMENT,
titulo VARCHAR(120) NOT NULL,
genero VARCHAR(40),
anioPublicacion INT,
editorial VARCHAR(100)
);
CREATE TABLE Autor (
idAutor INT PRIMARY KEY AUTO_INCREMENT,
nombre VARCHAR(80) NOT NULL,
pais VARCHAR(50)
);
CREATE TABLE LibroAutor (
idLibro INT NOT NULL,
idAutor INT NOT NULL,
PRIMARY KEY (idLibro, idAutor),
FOREIGN KEY (idLibro) REFERENCES Libro(idLibro),
FOREIGN KEY (idAutor) REFERENCES Autor(idAutor)
);
CREATE TABLE Prestamo (
idPrestamo INT PRIMARY KEY AUTO_INCREMENT,
fechaInicio DATE NOT NULL,
fechaFin DATE,
idLibro INT NOT NULL,
idEstudiante INT NOT NULL,
FOREIGN KEY (idLibro) REFERENCES Libro(idLibro),
FOREIGN KEY (idEstudiante) REFERENCES Estudiante(idEstudiante)
);