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