Наслідування з таблицею для кожного конкретного класу (шаблон проєктування)
Перейти до навігації
Перейти до пошуку
Наслідування з таблицею для кожного конкретного класу (англ. Concrete Table Inheritance) — шаблон проєктування, який пропонує зберігати ієрархію наслідування класів в окремих таблицях.
Оскільки реляційні бази даних не підтримують наслідування, потрібно придумати спосіб відображення такої ієрархії в сховищі.
Одним із рішень буде зберігати кожний клас в окремій таблиці. Тоді колонками у таких таблицях будуть усі поля всіх класів ієрархії.
- В Entity Framework даний підхід називається Table Per Concrete Type (TPC).
- Усі поля таблиці відповідають усім колонкам. Таким чином легше сприймати зв'язок між таблицею та об'єктом
- Не потрібні складні запити, для отримання даних конкретного типу, всі значення знаходяться у таблиці
- Переміщення полів в дочірній чи батьківський клас не вимагає зміни структури таблиць
- Важко завантажити у пам'ять ієрархію об'єктів різних типів
- Зміни у батьківських класах впливають на структури таблиць спадкоємців
- Первинні ключі можуть збігатись у різних класах ієрархії
Нехай дана ієрархія об'єктів.
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 string Name { get; set; }
}
class FootballerTable
{
public string Name { get; set; }
public string Club { get; set; }
}
class CricketerTable
{
public string Name { get; set; }
public int BattingAverage { get; set; }
}
- Успадкування (програмування)
- Наслідування з однією таблицею
- Наслідування з таблицею для кожного класу
- Concrete Table Inheritance [Архівовано 1 листопада 2020 у Wayback Machine.]