Domanda

Sto usando il concetto di single table inheritance a causa delle considerazioni OOP del corso.
Ad esempio, PostLike e TopicLike eredit dalla classe Like.
Vedo due problemi con questa metodologia:

    .
  1. invece di due tavoli (postchi e argomenti simili) ottengo "un grande tavolo" di Mi piace.
  2. Questa tabella ha una colonna aggiuntiva chiamata Dtype che consente l'identificazione del record (I.e. Tipo di tipo).A lungo termine potrebbe essere un enorme rifiuto di spazio su disco.Non è vero?

    Non sono un esperto di DB e per cui volevo ottenere le tue intuizioni su questo design del database e se questi due problemi sono cruciali.

È stato utile?

Soluzione

Se hai solo una tabella invece di due, le letture saranno più veloci, perché eviterai "unire". Ma userai più spazio perché avrai una colonna extra "Dtype" e alcune colonne vuote.

Prendiamo un esempio.Ecco il modello (senza le annotazioni JPA):

public abstract class Like {
    public Long id;

    public String foo;
}

public class PostLike extends Like {

    public String post;
}


public class TopicLike extends Like {

    public String topic;
}
.

Otterrai il tavolo Like:

----------------------------------
|dtype | id | foo | topic | post |
----------------------------------
|post  |  1 |   a |  NULL |   p1 |
|topic |  2 |   b |    t1 | NULL |
----------------------------------
.

E come puoi vedere, per un oggetto "post-simile", avrai un valore "argomento" null.

Ma al giorno d'oggi, lo spazio su disco se non un vero problema.

L'unico difetto che vedo con l'ereditarietà della tabella singola è il numero di colonne che possono essere enormi se hai molte proprietà, ed è più difficile aggiungere una nuova proprietà / colonna nel tuo modello (se devi applicare aDB Evolution).

e afaik, Ebean supporta solo "Ereditarietà da tavolo singola".

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top