tabela única herança (com Ebean + Jogar!framework)
-
11-12-2019 - |
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:
- em vez de duas tabelas (PostLike e TopicLike), recebo uma grande mesa" de gostos.
- 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.
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".