BD CLASE 2 2024-II

 

Diseño y creación de una base de datos relacional para gestionar la información de vehículos y sus mantenimientos.

Objetivos principales:

 

Identificar la información relevante: A partir de un conjunto de datos (imágenes en este caso), se identificaron las entidades clave (vehículos, empleados, mantenimientos) y sus atributos (marca, modelo, nombre del empleado, fecha de mantenimiento, etc.).

Establecer relaciones: Se determinaron las relaciones entre estas entidades (un vehículo puede tener múltiples mantenimientos, un empleado puede ser responsable de varios vehículos).

Crear un diagrama de entidad-relación: Se representó visualmente la estructura de la base de datos, mostrando las entidades y sus relaciones.

Diseñar tablas: Se definieron las tablas necesarias para almacenar la información, especificando los campos y las claves primarias y foráneas.


Entendido. A partir de los objetivos proporcionados, se estructurará un tutorial detallado sobre el diseño y la creación de una base de datos relacional para gestionar información de vehículos y sus mantenimientos.


Tutorial: Diseño y Creación de una Base de Datos Relacional para Gestión de Vehículos y Mantenimientos

Este tutorial te guiará paso a paso en el proceso de diseñar y estructurar una base de datos relacional, enfocándose en la gestión de vehículos y sus respectivos mantenimientos. Utilizaremos los principios del modelado de datos para asegurar una estructura lógica y eficiente.


1. Identificar la Información Relevante (Entidades y Atributos)

El primer paso es abstraer la información del mundo real y categorizarla en entidades (objetos principales) y atributos (sus características). Aunque el enunciado original menciona "imágenes", en este contexto, asumiremos que las imágenes contienen la siguiente información textual para su procesamiento:

  • Vehículos: Necesitamos almacenar datos sobre cada automóvil, camión, etc.
  • Empleados: Quienes realizan los mantenimientos.
  • Mantenimientos: Los registros de cada servicio o reparación realizado a un vehículo.

A continuación, desglosemos cada entidad con sus posibles atributos:

  • Entidad: Vehículo

    • ID_Vehiculo (Identificador único, clave primaria)
    • Marca (Ej. Toyota, Ford, Nissan)
    • Modelo (Ej. Corolla, F-150, Altima)
    • Año (Año de fabricación)
    • Placa (Número de matrícula)
    • Color
    • Numero_Motor (Identificador único del motor)
    • Tipo_Combustible (Ej. Gasolina, Diesel, Eléctrico)
    • Propietario_Nombre (Si se gestiona un único propietario, o se podría crear una entidad "Propietario")
  • Entidad: Empleado

    • ID_Empleado (Identificador único, clave primaria)
    • Nombre
    • Apellido
    • Cargo (Ej. Mecánico, Técnico, Gerente)
    • Telefono
    • Email
  • Entidad: Mantenimiento

    • ID_Mantenimiento (Identificador único, clave primaria)
    • ID_Vehiculo (Clave foránea que enlaza al Vehiculo al que se le realizó el mantenimiento)
    • ID_Empleado (Clave foránea que enlaza al Empleado que realizó el mantenimiento)
    • Fecha_Mantenimiento
    • Tipo_Mantenimiento (Ej. Cambio de aceite, Revisión, Reparación de frenos)
    • Costo
    • Observaciones (Descripción detallada del trabajo realizado)

2. Establecer Relaciones entre Entidades

Una vez identificadas las entidades y sus atributos, el siguiente paso es comprender cómo se interconectan. Esto se conoce como establecer las relaciones, que definen cómo los datos de una tabla se asocian con los datos de otra.

Analicemos las relaciones clave:

  • Vehículo y Mantenimiento:

    • Un Vehículo puede tener múltiples Mantenimientos.
    • Un Mantenimiento se realiza a un único Vehículo.
    • Tipo de Relación: Uno a Muchos (1:N) entre Vehículo y Mantenimiento. La clave primaria de Vehículo (ID_Vehiculo) se convierte en una clave foránea en Mantenimiento.
  • Empleado y Mantenimiento:

    • Un Empleado puede realizar múltiples Mantenimientos.
    • Un Mantenimiento es realizado por un único Empleado (en este modelo simplificado, si fueran varios, necesitaríamos una tabla intermedia).
    • Tipo de Relación: Uno a Muchos (1:N) entre Empleado y Mantenimiento. La clave primaria de Empleado (ID_Empleado) se convierte en una clave foránea en Mantenimiento.
  • Empleado y Vehículo (Responsabilidad):

    • Un Empleado puede ser responsable de varios Vehículos.

    • Un Vehículo puede ser atendido por varios Empleados (a lo largo del tiempo o para diferentes tipos de mantenimiento). Esto sugiere una relación de Muchos a Muchos (N:M). Para resolver esto en una base de datos relacional, se introduce una tabla intermedia o de "unión".

    • Entidad de Unión: Asignacion_Empleado_Vehiculo

      • ID_Asignacion (Clave primaria)
      • ID_Empleado (Clave foránea)
      • ID_Vehiculo (Clave foránea)
      • Fecha_Asignacion (Cuándo se asignó el empleado a ese vehículo)
      • Rol_Asignacion (Ej. Mecánico Principal, Especialista en Motor)
      • Tipo de Relación: Muchos a Muchos (N:M) entre Empleado y Vehículo, resuelta por la entidad Asignacion_Empleado_Vehiculo.

3. Crear un Diagrama de Entidad-Relación (DER)

El Diagrama Entidad-Relación es la representación visual de las entidades y sus relaciones. Utilizaremos la notación "patas de gallo" por su claridad en mostrar la cardinalidad (uno, muchos).

+-----------+       +-------------+       +---------------+       +-----------+
|  Vehiculo |       | Asignacion_ |       |  Mantenimiento  |       |  Empleado |
|           |       | Emp_Vehiculo|       |               |       |           |
+-----------+       +-------------+       +---------------+       +-----------+
| ID_Vehiculo (PK)  | ID_Asignacion (PK)  | ID_Mantenimiento (PK) | ID_Empleado (PK) |
| Marca             | ID_Vehiculo (FK)    | ID_Vehiculo (FK)      | Nombre           |
| Modelo            | ID_Empleado (FK)    | ID_Empleado (FK)      | Apellido         |
| Año               | Fecha_Asignacion    | Fecha_Mantenimiento   | Cargo            |
| Placa             | Rol_Asignacion      | Tipo_Mantenimiento    | Telefono         |
| Color             +-------------+       | Costo                 | Email            |
| Num_Motor         /|\  |           |       | Observaciones         +-----------+
| Tipo_Combustible   |    |           |       +---------------+
| Propietario_Nombre |    |           |
+-----------+        |    |           |
      |--------------|----|-----------|--------------------|
      |   (Uno)      |    | (Muchos)  | (Uno)              | (Muchos)
      |              |    |           |                    |
    (CERO o UNO)----(CERO o MUCHOS)-----< (UNO)-------------< (UNO o MUCHOS)


Cardinalidades explicadas:
* Un VEHÍCULO (1) puede tener CERO o MUCHAS ASIGNACIONES_EMP_VEHICULO (0..N).
* Una ASIGNACIÓN_EMP_VEHICULO (1) se refiere a UN ÚNICO VEHÍCULO (1).
* Un EMPLEADO (1) puede tener CERO o MUCHAS ASIGNACIONES_EMP_VEHICULO (0..N).
* Una ASIGNACIÓN_EMP_VEHICULO (1) se refiere a UN ÚNICO EMPLEADO (1).
* Un VEHÍCULO (1) puede tener CERO o MUCHOS MANTENIMIENTOS (0..N).
* Un MANTENIMIENTO (1) se realiza sobre UN ÚNICO VEHÍCULO (1).
* Un EMPLEADO (1) puede realizar CERO o MUCHOS MANTENIMIENTOS (0..N).
* Un MANTENIMIENTO (1) es realizado por UN ÚNICO EMPLEADO (1).

4. Diseñar Tablas (Esquema Relacional)

Con el DER como guía, el siguiente paso es transformar este modelo conceptual en un diseño lógico de tablas, especificando los tipos de datos y las restricciones de clave primaria y foránea.

  • Tabla: Vehiculos

    • id_vehiculo INT PRIMARY KEY AUTO_INCREMENT (o VARCHAR para placas si es más práctico como PK)
    • marca VARCHAR(50) NOT NULL
    • modelo VARCHAR(50) NOT NULL
    • año INT
    • placa VARCHAR(10) UNIQUE NOT NULL
    • color VARCHAR(30)
    • numero_motor VARCHAR(50) UNIQUE
    • tipo_combustible VARCHAR(20)
    • propietario_nombre VARCHAR(100) (asumiendo que es un campo simple por ahora)
  • Tabla: Empleados

    • id_empleado INT PRIMARY KEY AUTO_INCREMENT
    • nombre VARCHAR(50) NOT NULL
    • apellido VARCHAR(50) NOT NULL
    • cargo VARCHAR(50)
    • telefono VARCHAR(20)
    • email VARCHAR(100) UNIQUE
  • Tabla: Mantenimientos

    • id_mantenimiento INT PRIMARY KEY AUTO_INCREMENT
    • id_vehiculo INT NOT NULL (FOREIGN KEY REFERENCES Vehiculos(id_vehiculo))
    • id_empleado INT NOT NULL (FOREIGN KEY REFERENCES Empleados(id_empleado))
    • fecha_mantenimiento DATE NOT NULL
    • tipo_mantenimiento VARCHAR(100) NOT NULL
    • costo DECIMAL(10, 2)
    • observaciones TEXT
  • Tabla: Asignaciones_Empleado_Vehiculo (Tabla para relación N:M)

    • id_asignacion INT PRIMARY KEY AUTO_INCREMENT
    • id_empleado INT NOT NULL (FOREIGN KEY REFERENCES Empleados(id_empleado))
    • id_vehiculo INT NOT NULL (FOREIGN KEY REFERENCES Vehiculos(id_vehiculo))
    • fecha_asignacion DATE
    • rol_asignacion VARCHAR(50)
    • UNIQUE(id_empleado, id_vehiculo, fecha_asignacion) (Para evitar asignaciones duplicadas el mismo día)

5. Escribir Sentencias SQL para Crear las Tablas

Ahora, translate estos diseños de tabla en sentencias SQL, utilizando un lenguaje como MySQL o PostgreSQL (las diferencias suelen ser menores para CREATE TABLE).

SQL
-- Creación de la tabla Vehiculos
CREATE TABLE Vehiculos (
    id_vehiculo INT AUTO_INCREMENT PRIMARY KEY,
    marca VARCHAR(50) NOT NULL,
    modelo VARCHAR(50) NOT NULL,
    año INT,
    placa VARCHAR(10) UNIQUE NOT NULL,
    color VARCHAR(30),
    numero_motor VARCHAR(50) UNIQUE,
    tipo_combustible VARCHAR(20),
    propietario_nombre VARCHAR(100)
);

-- Creación de la tabla Empleados
CREATE TABLE Empleados (
    id_empleado INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(50) NOT NULL,
    apellido VARCHAR(50) NOT NULL,
    cargo VARCHAR(50),
    telefono VARCHAR(20),
    email VARCHAR(100) UNIQUE
);

-- Creación de la tabla Mantenimientos
CREATE TABLE Mantenimientos (
    id_mantenimiento INT AUTO_INCREMENT PRIMARY KEY,
    id_vehiculo INT NOT NULL,
    id_empleado INT NOT NULL,
    fecha_mantenimiento DATE NOT NULL,
    tipo_mantenimiento VARCHAR(100) NOT NULL,
    costo DECIMAL(10, 2),
    observaciones TEXT,
    FOREIGN KEY (id_vehiculo) REFERENCES Vehiculos(id_vehiculo) ON DELETE CASCADE ON UPDATE CASCADE,
    FOREIGN KEY (id_empleado) REFERENCES Empleados(id_empleado) ON DELETE RESTRICT ON UPDATE CASCADE
);

-- Creación de la tabla Asignaciones_Empleado_Vehiculo (para la relación N:M)
CREATE TABLE Asignaciones_Empleado_Vehiculo (
    id_asignacion INT AUTO_INCREMENT PRIMARY KEY,
    id_empleado INT NOT NULL,
    id_vehiculo INT NOT NULL,
    fecha_asignacion DATE,
    rol_asignacion VARCHAR(50),
    FOREIGN KEY (id_empleado) REFERENCES Empleados(id_empleado) ON DELETE CASCADE ON UPDATE CASCADE,
    FOREIGN KEY (id_vehiculo) REFERENCES Vehiculos(id_vehiculo) ON DELETE CASCADE ON UPDATE CASCADE,
    UNIQUE (id_empleado, id_vehiculo, fecha_asignacion) -- Evita duplicados para la misma asignación en el mismo día
);

Consideraciones Adicionales sobre FOREIGN KEY:

  • ON DELETE CASCADE: Si un registro en la tabla Vehiculos (padre) es eliminado, todos los Mantenimientos y Asignaciones asociados a ese vehículo en las tablas hijas también se eliminarán automáticamente. Útil cuando la información hija no tiene sentido sin el padre.
  • ON DELETE RESTRICT (o NO ACTION): Si un Empleado (padre) tiene Mantenimientos asociados en la tabla hija, no se permitirá eliminar ese Empleado. Se debe eliminar primero los registros de la tabla hija.
  • ON UPDATE CASCADE: Si el ID_Vehiculo o ID_Empleado cambia en la tabla padre, se actualizará automáticamente en las tablas hijas.

Al completar este tutorial, tendrás un modelo de base de datos relacional robusto y listo para ser implementado en un SGBD, capaz de gestionar eficientemente la información de vehículos y sus mantenimientos. ¿Te gustaría explorar cómo insertar datos o realizar consultas básicas?


Referencias

American Psychological Association. (2020). Publication Manual of the American Psychological Association (7th ed.). American Psychological Association.

Comentarios