Diseño de Sistemas
Agenda
de la clase
2
1.
Relaciones entre Entidades
Conectando tablas
3
2.
Herencia en ORM
Definiendo jerarquías
4
Herencia en
ORM
Usamos lo de Supertipo-Subtipo en el DER, verdad?
Herencia en
ORM
Usamos lo de Supertipo-Subtipo en el DER, verdad?
ESO NO EXISTE
Herencia en
ORM
En los motores de bases de datos relacionales (RDBMS) el único tipo de relación posible entre tablas es el de ‘tiene’, que representan las FKs
Alternativas usando FK’s
Herencia en
ORM
Tomemos el siguiente ejemplo en objetos
Single
Table
Single Table
Joined
Joined
Table
Per Class
Table Per Class
Herencia en
ORM
Cómo compararlas?
Herencia en
ORM
Consultas polimórficas
Son las que acceden a un objeto tipado como la clase padre, es decir, sin saber el tipo concreto de la instancia finalmente devuelta
(Pueden ser relaciones ToOne o ToMany)
Consultas
Polimórficas
Obtener el próximo evento del Usuario con ID == 1
Consultas
Polimórficas
Single Table
SELECT * FROM EVENTO E
INNER JOIN USUARIO U ON U.PROX_EVENTO_ID = E.ID
WHERE U.ID = 1
Como es 1 sola tabla, es fácil, un solo join y ya tiene todo
Obtener el próximo evento del Usuario con ID == 1
Consultas
Polimórficas
Incluso si la consulta no es polimórfica necesita hacer al menos 1 JOIN
Joined
SELECT * FROM EVENTO E
INNER JOIN USUARIO U ON U.PROX_EVENTO_ID = E.ID
LEFT OUTER JOIN EVENTO_RECURRENTE ER ON E.ID = ER.ID
LEFT OUTER JOIN EVENTO_UNICO EU ON E.ID = EU.ID
WHERE U.ID = 1
Tiene que hacer LEFT JOIN con todas las subclases
Obtener el próximo evento del Usuario con ID == 1
Consultas
Polimórficas
Table Per Class
(SELECT * FROM EVENTO_UNICO EU
INNER JOIN USUARIO U ON U.PROX_EVENTO_ID = EU.ID
WHERE U.ID = 1)
UNION
(SELECT * FROM EVENTO_RECURRENTE ER
INNER JOIN USUARIO U ON U.PROX_EVENTO_ID = ER.ID
WHERE U.ID = 1)
Como estan todas separadas hace UNION
(MUY COSTOSO)
Obtener el próximo evento del Usuario con ID == 1
Herencia en
ORM
| Single Table | Joined | Table Per Class |
Distribución de atributos | Todos juntos, incluso si no se usan | Comunes arriba y específicos abajo | Atributos comunes duplicados |
Campos Not Null | No admite en campos no comunes | Admite | Admite |
Integridad referencial/Índices | Permite FK/índices | Permite FK/índices | No permite FK/índices |
Consultas Polimórficas | No requiere joins extra (costo ) | Utiliza Left Joins por cada sublcase (costo ) | Utiliza Unions por cada subclase (costo ) |
Herencia en
ORM
Herencia en
ORM
Mapped Superclass
Herencia en
ORM
Y las interfaces?
22
Preguntas?
3.
Ejemplos
A ver qué onda todo esto
23
Para la clase que viene
Les estaremos enviando un email con:
Recuerden enviar consultas al foro
24
Muchas Gracias!!
Si tienen consultas
https://github.com/dds-jv/foro
25