Skip to content

Proyecto de migración de base de datos MySQL a Neodatis con Java.

License

Notifications You must be signed in to change notification settings

RGiskard7/neodatis-migration-example

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

neodatis-migration-example

Proyecto de migración de base de datos relacional (MySQL) a una base de datos orientada a objetos (Neodatis).

Este repositorio contiene un proyecto de Java que realiza las siguientes acciones:

  1. Conecta con la base de datos relacional BDrel_clases en MySQL.
  2. Crea una nueva base de datos orientada a objetos FitnessClub.neo usando Neodatis.
  3. Migra los datos de las tablas (clases, gimnasios y monitores) de la base de datos relacional a la nueva base de datos.
  4. Realiza consultas de validación y prueba en la base de datos orientada a objetos.

Tabla de Contenidos


🎯 Contexto del Proyecto

La empresa BDConsulting requiere automatizar la migración de una base de datos MySQL que gestiona información de una cadena de gimnasios (FitnessClub) a una nueva base de datos orientada a objetos en Neodatis.

El propósito de este proyecto es:

  • Practicar la conexión a MySQL desde Java.
  • Aprender a utilizar la API de Neodatis para la persistencia de objetos.
  • Realizar migraciones y comprobaciones de datos en un entorno de prueba.

🏗 Estructura de la Base de Datos Relacional

La base de datos relacional se encuentra en MySQL y consta de cuatro tablas principales:

  1. Gimnasios
  2. Monitores
  3. Clases
  4. ClasMon (tabla intermedia para relacionar monitores y clases)

Para crear la base de datos original, se incluye el script BDrel_clases.sql.


🏗 Estructura de la Base de Datos Orientada a Objetos

Las clases Java que modelan la base de datos Neodatis son:

  • Gimnasios

    Integer cod_centro;
    String nombre;
    Monitores responsable;
    String direccion;
    String localidad;
    String provincia;
    Set<Monitores> setMonitores;
  • Monitores

    Integer cod_monitor;
    String nombre;
    String apellido;
    Date fecha_nac;
    String sexo;
    Gimnasios gimnasio;
  • Clases

    Integer cod_clase;
    String nombre;
    String dificultad;
    Integer durac_min;
    Set<Monitores> setMonitores;

Estas clases contienen las relaciones necesarias para que Neodatis gestione la persistencia de manera orientada a objetos.


🛠 Requisitos

  • Java 8 o superior
  • Driver JDBC para MySQL (por ejemplo, mysql-connector-java-8.0.x.jar).
  • Neodatis (librería .jar para la persistencia orientada a objetos).
  • MySQL instalado y configurado, o acceso a un servidor MySQL remoto.

⚙️ Instalación

  1. Clona este repositorio:

    git clone https://github.com/RGiskard7/neodatis-migration-example.git
  2. Importa el proyecto en tu IDE (Eclipse, IntelliJ, NetBeans, etc.) o configúralo con tu herramienta de compilación preferida (Maven, Gradle, etc.).

  3. Descarga las librerías necesarias:

  4. Incluye las librerías en tu ruta de clase (classpath) o en el pom.xml/build.gradle si usas un gestor de dependencias.

  5. Configura tu archivo de propiedades o variables de entorno para apuntar a la base de datos MySQL:

    db.url=jdbc:mysql://localhost:3306/BDrel_clases
    db.user=root
    db.password=1234
    

🚀 Uso

  1. Ejecuta el script BDrel_clases.sql en tu servidor MySQL para crear la base de datos relacional y poblarla con datos de prueba.
  2. Inicia la aplicación Java:
    • Se conectará a la base de datos MySQL usando la configuración proporcionada.
    • Creará el archivo FitnessClub.neo (base de datos orientada a objetos de Neodatis).
    • Migrará los datos de las tablas Gimnasios, Monitores y Clases.
    • Configurará los sets de monitores en cada gimnasio y en cada clase.
  3. Verifica la migración:
    • El proyecto incluye varias consultas (parte II de la práctica) para comprobar que los datos se han migrado correctamente.

📊 Consultas de Validación

El programa ofrece distintas consultas para validar y probar la base de datos orientada a objetos, por ejemplo:

  1. Mostrar gimnasios por provincia con su responsable y monitores.
  2. Calcular la media de duración de las clases para un nivel de dificultad.
  3. Listar monitores que cumplan ciertas condiciones (p.ej. mujeres con nombre que no acabe en "A").
  4. Sumar la duración de las clases impartidas por cada monitor.
  5. Contar los centros por provincia.

🔄 Metodología de Migración

  1. Inserción de Clases: primero se insertan los objetos de la tabla Clases sin los sets de monitores.
  2. Inserción de Gimnasios: se insertan los objetos de la tabla Gimnasios sin los sets de monitores y sin el responsable.
  3. Inserción de Monitores: se insertan los objetos de la tabla Monitores.
  4. Actualización de Relaciones: una vez creados monitores, se actualizan los Set<Monitores> en Gimnasios y Clases, y se asigna el responsable del gimnasio.

Se incluyen métodos de comprobación para evitar duplicados antes de insertar.


📁 Estructura del Proyecto

src/
├── com.example.practica4ad/
│   ├── Sistema.java                 # Clase principal, gestión de menús y punto de entrada
│   │
│   ├── datos/
│   │   ├── MySQLBD.java            # Singleton para gestión de conexiones MySQL
│   │   │
│   │   └── modelos/                # Clases de entidad
│   │       ├── Clases.java         # Modelo para actividades deportivas
│   │       ├── Gimnasios.java      # Modelo para centros deportivos
│   │       └── Monitores.java      # Modelo para instructores
│   │
│   ├── servicios/
│   │   ├── ConsultasBD.java        # Implementación de consultas Neodatis
│   │   │                           # - Consultas por provincia
│   │   │                           # - Estadísticas de duración
│   │   │                           # - Filtros de monitores
│   │   │                           # - Análisis de clases
│   │   │
│   │   └── MigracionBD.java        # Gestión de migración MySQL → Neodatis
│   │                               # - Migración de datos básicos
│   │                               # - Actualización de relaciones
│   │                               # - Validación de integridad
│   │
│   └── util/
│       └── Util.java               # Utilidades de formato y mensajes
│                                   # - Códigos ANSI para colores
│                                   # - Mensajes de error/éxito
│
└── resources/                      # Recursos del proyecto
    └── BDrel_clases.sql            # Script de creación de BD MySQL

✍️ Créditos

  • Autor: Eduardo Díaz Sánchez
  • Asignatura: Acceso a Datos, DAM
  • Centro Educativo: IES Calderón de la Barca (Pinto)

📝 Licencia

Este proyecto se distribuye bajo la licencia MIT.