Вопрос

Я использую концепцию single table inheritance конечно, из соображений ООП.
например, PostLike и TopicLike наследовать от Like сорт.
Я вижу две проблемы в этой методологии:

  1. вместо двух таблиц (PostLike и TopicLike) я получаю «одну большую таблицу» лайков.
  2. в этой таблице есть дополнительный столбец под названием dtype что позволяет идентифицировать запись (т.е.типа лайк).в долгосрочной перспективе это может быть огромная трата дискового пространства.не так ли?

Я не эксперт по БД, и поэтому мне хотелось узнать ваше мнение о конструкции этой базы данных и о том, важны ли эти две проблемы.

Это было полезно?

Решение

Если у вас только одна таблица вместо двух, чтение будет быстрее, поскольку вы избежите «объединений».Но вы будете использовать больше места, потому что у вас будет дополнительный столбец «dtype» и несколько пустых столбцов.

Давайте возьмем пример.Вот модель (без аннотаций 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;
}

Ты получишь стол Like:

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

И, как вы можете видеть, для элемента «PostLike» у вас будет значение NULL «topic».

Но в настоящее время дисковое пространство не является настоящей проблемой.

Единственный недостаток, который я вижу при наследовании одной таблицы, — это количество столбцов, которое может быть огромным, если у вас много свойств, и сложнее добавить новое свойство/столбец в вашу модель (если вам нужно применить эволюцию БД). .

И АФАИК, ebean поддерживает только «однотабличное наследование».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top