entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

Implementar Herencia en Mysql Workbench, es posible?

Hola a todos,

Quisiera preguntar si es posible implementar una herencia dibujando el diagrama EER en Mysql Workbench, donde por ejemplo exista un usuario que posea identificación, nombre y contraseña, y exista un estudiante que posea el pregrado que está cursando, la universidad donde la estudia... etc.. (cualquier información además.) y este estudiante pueda ser un usuario; por otro lado suponer que exista un profesor que posea un grupo de investigación al que pertenece, un tiempo de vinculación.. entre otros datos y este profesor también pueda ser un usuario, para que ambos (Estudiante y Profesor) hereden los datos de Usuario.

Cómo es posible representar este diagrama EER implementando la herencia en Mysql Workbench? he leído por ahí que Mysql no soporta herencia, pero algunas personas han tratado de implementarla.

Entonces, esto sería posible? cómo podría hacerlo?

Mcuhas gracias por su atención y colaboración prestada.

----------- ACTUALIZACIÓN ----------------------

El problema que deseo resolver es el caso de un login del sistema, donde no tenga que redudar datos para los usuarios, en mi problema existen 3 tipos de usuarios

  1. Estudiante
  2. Docente
  3. Administrador

Cada uno tiene información propia de su rol, pero además comparten la información para el ingreso al sistema, como lo es:

  • Identificación
  • Contraseña

Entonces deseo que en la base de datos no se almacene información redudante o que pueda ser utilizada por otras tablas y no se esté haciendo así.

3 Respuestas

2votos

Leonardo-Tadei Puntos227320

Uy, uy, uy... plantear herencia en los almacenamientos suele significar que estás modelando mal, porque las jerarquías de clases deben especializarse por comportamiento y no por estructura.

El problema del Estudiante-Profesor-AyudanteAlumno está además muy analizado como ejemplo de esto.

en tu caso, bastaría que tanto Estudiante como Profesor tengan por composición al Usuario para usarlo, con lo que no hace falta ninguna herencia, cosa que además no reflejaría la realidad porque el comportamiento del Estudiante y del Profesor en el sistema debe ser bien distinto.

Luego depende del lenguaje, pero si usás alguno que tenga un ORM decente, incluso no haría falta pensar en las tablas a la hora de escribir el código (solo un rato al momento de hacer los mapeos)

Saludos cordiales!

0voto

admont28 comentado

oh que pena @Leonardo-Tadei, no expresé bien el problema a resolver, estoy actualizando la pregunta, y en cuanto al lenguaje lo hago en PHP porque con el es que he tenido experiencia.

Gracias...

0voto

Leonardo-Tadei comentado

Hola @admont28,

no sé si puedo darte un ejemplo más visual, porque estamos hablando de un problema en abstracto...

Respecto de escribir todo desde cero, es una cuestión que tal vez quieras reveer, en el sentido que así como es muy probbable que uses JQuery para no tener que escribir toda la capa de interacción con el usuario desde cero en JavaScript, podrías usar algún ORM para PHP para no tener que escribir desde cero un repositorio virtual para que los objetos de tu Modelo persistan.

Ya habíamos comentado por acá sobre este ORM en PHP que es Software Libre: https://github.com/PegasusTech pero hay otras alternativas y en gran parte depende de con qué paradigma d eprogramación vayas a resolver el problema.

Yo en lo que incisto es que un almacenamiento relacional debe estar normalizado al menos en 3FN... lo demás puede que sea opinable.

Seguimos!

0voto

admont28 comentado

Muchas gracias @Leonardo-Tadei, pero me estoy confundiendo mucho con todo esto, mi pregunta sería: que solución me puedes brindar para el problema que plantee en la pregunta principal? independiente del lenguaje que use o el ORM... me interesaría conocer sólo la solución en cuanto al diagrama EER se refiere.

Saludos! y que pena hacer tan extensa la pregunta, pero no he podido solucionar mi problema. :(

0voto

Leonardo-Tadei comentado

Cuando aplicás la 3FN a tu problema, las tablas quedarían así:

Usuario
-----------
id
nom
pas

Docente
------------
id
ape
nom
...
id_usuario

Estudiante
---------------
id
ape
nom
matricula
...
id_usuario

Administrador
-------------------
id
ape
nom
rol
...
id_usuario

Inventé datos y estoy asumiendo por tu pregunta que los datos del login serán parte del software y cualquier otra de las formas de loguear a un usuario que existen.

Al aplicar la Normalización, resulta que los datos de login no dependen únicamente de la clave primaria, y por tanto pasan a otra tabla para quedar en 3ra forma normal.

Saludos!

2votos

white Puntos75880

Mysql no soporta herencia al ser relacional, y en Mysql Workbench no es posible mostrarlo visualmente.

La herencia se podría implementar de algunas formas, como usar una clase padre ( usuario ) y sub-clases (estudiante, profesor)

En estudiante y profesor se agrega una llave foreana de relacion con la llave primaria de usuario.

CREATE TABLE estudiante(
    estudiante_id int,
    PRIMARY KEY(estudiante_id),
    FOREIGN KEY (estudiante_id) REFERENCES usuario(usuario_id)
    -- aca una accion referencial ( cascade, restrict, no action, etc ).
) ENGINE=INNODB;

3votos

dairon Puntos17120

Según Recuerdo el PostgreSQL si soporta la herencia en su extructura por si te sirve de algo aquí te dejo algo de documentación:

CREATE TABLE ciudades (
    nombre        text,
    poblacion     float,
    altura        int
);

CREATE TABLE capitales (
    departamento           char(2)
) INHERITS (ciudades);

Tutoriales de Postgre
Herencias de Tablas en Postgre
Características Avanzadas de SQL en Postgres
Espero te sirva de ayuda. Saludos Dairon

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta