Спадкування зі спільною таблицею (інша назва Наслідування з одною таблицею, ) — шаблон проєктування, який пропонує зберігати ієрархію наслідування класів у вигляді однієї таблиці.

Опис

Оскільки реляційні бази даних не підтримують спадкування, потрібно придумати спосіб відображення такої ієрархії в сховищі.

Рішенням буде зберігати всю ієрархію в одній таблиці. Тоді колонками у такій таблиці будуть усі поля всіх класів ієрархії.

Застосування

У Hibernate (Java) та Entity Framework даний підхід називається Table-Per-Class-Hierarchy та Table-Per-Hierarchy (TPH) відповідно. Колонка, яка відповідає за тип об'єкта, називається дискримінатор (Discriminator).

Переваги та недоліки

Переваги

У структуру бази додається лише одна таблиця Не потрібні JOIN команди для отримання даних, лише WHERE Переміщення полів в дочірній чи батьківський клас не вимагає зміни структури таблиці

Недоліки

Необхідно додати колонку, яка відповідає за тип об'єкта Деякі колонки таблиці використовуються лише певними класами ієрархії, що призводить до витрат пам'яті

Реалізація

Нехай дана ієрархія об'єктів.

Тоді у сховищі ці об'єкти представлятимуться однією таблицею.

Див. також Успадкування (програмування) Спадкування з таблицею для кожного класу Спадкування з таблицею для кожного конкретного класу

Джерела Single Table Inheritance