BonBonSlick
@BonBonSlick
Vanilla Full Stack Web Architector

На сколько эффективен Single Table Inheritance?

Реальный пример
class Authentication{
    $password;
    $email;
}

User extends Authentication{
   $name;
   $posts; // relation ID
}
Admin extends Authentication {
   $actions; 
}
Moderator extends Authentication{
   $name;
   $moderatedPosts;
}
Supportextends Authentication{
   $name;
   $helpedUsers; // relation ID
}


Table structure for table authentication_clients

name  // for everyone, even admin who do not have name
password
email
// relations
helpedUsers // referenced on this table
moderatedPosts // join referenced to external table
posts // join referenced to external table
actions // long json of serialized objects


Вот что выходит
1 - у нас есть пустые поля вроде имени для Админа
2 - пуситые для других так же есть helpedUsers
3 - огромная таблица с кучей полей, читать которую сложно
4 - вес БД больше
5 - Более быстрая выборка особенно в pgsql
6 - Проще изменять таблицу и маппить к обьектам
7 - сложнее масштабировать, некоторые данные явно будут дублироваться, те которые можно быо бы вынести в отдельный обьект со своей таблицей как в Class Table Inheritance.

Возникаоют вопросы, когда и зачем использовать Single Table Inheritance?
При каких обьемах данных?
Скажем при 10 000 000 записях с UUID как ID и еще 100 полей типа ValueObject, как хорошо будет работать?
Когда, почему и что предпочтительнее использовть из 3-х шаблонов проектирования inheritance в таблицах?

Кто работал, поделитесь пожалуйста опытом. Возможно я что-то еще упустил из списка. Опыта работы со всеми 3-мя шаблонами на реальных, хай лоад проектах увы нет, поетому сложно корректно оценить еффективность того или иного. Возможно где-то есть перфоманс тесты или их результаты.

Наиболее гибкий из Class, Concrete и Single table Inheritances, Class. Но там выходить масса джойнов, ведь на каждый класс таблица. Зато дублируемость данных сведена к минимуму.
Самя я использую Concrete или Class, Single никогда не использовал.

Инфа из книги https://martinfowler.com/eaaCatalog/classTableInhe...
  • Вопрос задан
  • 67 просмотров
Пригласить эксперта
Ответы на вопрос 1
@hwnd32
у нас миллион записей с наследованием на doctrine и летает всё
https://www.doctrine-project.org/projects/doctrine...

посмотрите как там реализуется
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы