Наслідування з таблицею для кожного класу (шаблон проєктування)
Зовнішній вигляд
Наслідування з таблицею для кожного класу (англ. Class Table Inheritance) — шаблон проєктування, який пропонує зберігати ієрархію наслідування класів в окремих таблицях.
Оскільки реляційні бази даних не підтримують наслідування, потрібно придумати спосіб відображення такої ієрархії в сховищі.
Одним із рішень буде зберігати кожний клас в окремій таблиці. Тоді колонками у таких таблицях будуть лише необхідні поля класів ієрархії.
- В Entity Framework даний підхід називається Table Per Type (TPT).
- Таблиці не займають зайвої пам'яті оскільки зберігають лише описані поля
- Зв'язок між моделлю і схемою бази даних простий і зрозумілий
- Зміни у батьківських класах не впливають на структури таблиць спадкоємців
- Завантаження об'єкта вимагає запиту одразу до кількох таблиць
- Переміщення полів в дочірній чи батьківський клас вимагає зміни структури таблиць
- Таблиці батьківських класів стають вузьким місцем усі запити їх використовують
- Необхідна синхронізація значень між таблицями
Нехай дана ієрархія об'єктів.
public class Player
{
public string Name { get; set; }
}
class Footballer : Player
{
public string Club { get; set; }
}
class Cricketer : Player
{
public int BattingAverage { get; set; }
}
Тоді у сховищі ці об'єкти представлятимуться таблицями, які міститимуть лише необхідні поля.
public class PlayerTable
{
public int Id { get; set; }
public string Name { get; set; }
}
class FootballerTable
{
public int PlayerId { get; set; }
public string Club { get; set; }
}
class CricketerTable
{
public int PlayerId { get; set; }
public int BattingAverage { get; set; }
}
- Успадкування (програмування)
- Наслідування з однією таблицею
- Наслідування з таблицею для кожного конкретного класу
- Class Table Inheritance [Архівовано 12 листопада 2020 у Wayback Machine.]