Pergunta

Eu estou usando o conceito de single table inheritance devido a OOP considerações de curso.
por exemplo, PostLike e TopicLike herdam Like de classe.
Eu vejo dois problemas com esta metodologia:

  1. em vez de duas tabelas (PostLike e TopicLike), recebo uma grande mesa" de gostos.
  2. esta tabela tem uma coluna adicional chamada dtype que permite a identificação de registros (por exemplo,tipo de gosto).no longo prazo, poderia ser um enorme desperdício de espaço em disco.não é?

Eu não sou um DB especialista e por causa do que eu queria colocar suas idéias sobre este design de banco de dados e se ou não desses dois problemas são cruciais.

Foi útil?

Solução

Se você tiver somente uma tabela em vez de dois, o lê vai ser mais rápido, porque você vai evitar "junta".Mas você vai usar mais espaço, porque você vai ter um extra "dtype" coluna, e algumas colunas vazias.

Vamos pegar um exemplo.Aqui é o modelo (sem as anotações 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;
}

Você vai obter a tabela de Like:

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

E como você pode ver, para um "PostLike" item, você terá um valor NULO "tópico" de valor.

Mas hoje em dia, o espaço em disco, se não for um problema real.

A única falha que eu veja com a única herança de tabela é o número de colunas que pode ser enorme se você tem um monte de propriedades, e é mais difícil para adicionar uma nova propriedade/coluna em seu modelo (se você tiver que aplicar um DB evolution).

E AFAIK, ebean só suporta "tabela única herança".

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top