Introduccion BD Herencia - eliizquierdo/material_programacion_avanzada2026 GitHub Wiki
📦 Proyecto:
mini-crud-alumno-sql(Tema 4 — Herencia + MySQL) — ⬇️ Descargar ZIP · ☁️ Abrir en Codespace
El Desafío de Extender el Sistema CRUD
Acabamos de terminar, con gran orgullo, nuestro mini-CRUD básico que gestiona la entidad Persona. Nuestro código es limpio, sigue el patrón MVC, y funciona a la perfección.
Sin embargo, en el demo final, nuestro jefe nos suelta la bomba: "En realidad, este proyecto será algo más ambicioso. Necesitamos gestionar todo el sistema académico: Alumnos y Profesores." 😟
El pánico dura solo un momento. Pensamos rápido: tanto los alumnos como los profesores son, fundamentalmente, personas. ¡No todo está perdido!
Según lo aprendido en Programación Orientada a Objetos y en Modelado de Bases de Datos, podemos aprovechar lo que ya tenemos programado y extenderlo.
El Desafío de la Herencia en el Modelo de Datos
Reconocemos dos grandes tareas por delante:
-
En Java (Capa VO): Aplicaremos la Herencia. Crearemos la clase
AlumnoVOy la futuraProfesorVOque extenderán de la clase basePersonaVO. Esto nos permite reutilizar atributos comunes (codigo,nombre, etc.) y añadir los campos específicos de cada rol (carrera,sueldo, etc.). -
En la Base de Datos (Capa DAO): Aplicaremos el patrón de Herencia de Tabla Dividida. Necesitaremos dos tablas relacionadas (
PersonayAlumno). Esto nos plantea un desafío crucial: ¿Cómo garantizamos que la inserción o actualización de un Alumno sea atómica?
💡 La Solución en el DAO: Transacciones JDBC
Para superar este desafío y asegurar la integridad de la BD, sabemos que la clave es simple y fundamental:
- Atomicidad: Debemos utilizar Transacciones JDBC (
COMMITyROLLBACK) para que la inserción de datos en la tablaPersonay la tablaAlumnoocurra como una única unidad.
Nuestra misión ahora es migrar de un PersonaDAO simple a un sistema robusto y transaccional, empezando por la entidad Alumno.
1. Cambios en la Base de Datos (SQL) 💾
El primer paso es modelar la herencia en la base de datos con una relación uno a uno, donde la tabla hija (alumno) utiliza la clave primaria de la tabla padre (persona) como su propia clave primaria y clave foránea.
/********************************/
DROP DATABASE institutoWeb; -- Opcional, para empezar de cero
CREATE DATABASE institutoWeb;
USE institutoWeb;
/********************************/
-- Crear tabla personas
CREATE TABLE personas (
codigo INT PRIMARY KEY,
nombre VARCHAR(10) NOT NULL
);
-- Crear tabla alumnos con FK a persona
CREATE TABLE alumnos (
codigo INT PRIMARY KEY, -- Es la PK y también la FK
telefono VARCHAR(10),
FOREIGN KEY (codigo) REFERENCES personas (codigo) ON DELETE CASCADE
);
Continuemos con Clase-AlumnoVO
📋 Palabras clave
herencia Java · PersonaVO · AlumnoVO · extends · herencia en BD · tabla personas · tabla alumnos · FK · ON DELETE CASCADE · transacciones JDBC · COMMIT · ROLLBACK · Herencia de Tabla Dividida
🧠 Autoevaluación — Herencia en Java y BD