1 of 25

Diseño de Sistemas

2 of 25

Agenda

de la clase

  • Relaciones entre Entidades
  • Herencia en ORM
  • Ejemplos
  • Para la próxima clase

2

3 of 25

1.

Relaciones entre Entidades

Conectando tablas

3

4 of 25

2.

Herencia en ORM

Definiendo jerarquías

4

5 of 25

Herencia en

ORM

​

Usamos lo de Supertipo-Subtipo en el DER, verdad?

​

6 of 25

Herencia en

ORM

​

Usamos lo de Supertipo-Subtipo en el DER, verdad?

​

ESO NO EXISTE

7 of 25

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

  • Single Table
  • Joined
  • Table Per Class

8 of 25

Herencia en

ORM

​

Tomemos el siguiente ejemplo en objetos

9 of 25

Single

Table

​

Single Table

  • Una sola tabla
  • Campos nullables
  • Discriminador

10 of 25

Joined

​

Joined

  • Una tabla para la clase padre
  • Una tabla para cada clase hija
  • PKs de clases hijas son FK a clase padre

​

​

​

11 of 25

Table

Per Class

​

Table Per Class

  • Una tabla para cada clase concreta
  • Campos de la superclase duplicados
  • Al apuntar a 2 tablas, la FK desde otras entidades se pierde
  • No se puede indexar

​

​

12 of 25

Herencia en

ORM

​

Cómo compararlas?

​

  • Distribución de atributos
  • Nullabilidad de campos
  • Consultas polimórficas
  • Integridad referencial / Índices

13 of 25

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)

14 of 25

Consultas

Polimórficas

​

Obtener el próximo evento del Usuario con ID == 1

15 of 25

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

16 of 25

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

17 of 25

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

18 of 25

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 )

19 of 25

Herencia en

ORM

​

20 of 25

Herencia en

ORM

​

Mapped Superclass

​

  • Mapea los atributos de la clase padre a las tablas de las clases hijas
  • No permite consultas polimórficas
  • No se puede apuntar a una Mapped superclass

​

​

​

21 of 25

Herencia en

ORM

​

Y las interfaces?

​

22 of 25

22

Preguntas?

23 of 25

3.

Ejemplos

A ver qué onda todo esto

23

24 of 25

Para la clase que viene

​

Les estaremos enviando un email con:

  • Apuntes para que lean sobre UI
  • Form de seguimiento de los mismos
  • Un ejercicio (a confirmar) para que lo vayan pensando

​

Recuerden enviar consultas al foro

​

24

25 of 25

Muchas Gracias!!

Si tienen consultas

https://github.com/dds-jv/foro

25