Спадкування зі спільною таблицею (інша назва Наслідування з одною таблицею, англ. Single Table Inheritance) — шаблон проєктування, який пропонує зберігати ієрархію наслідування класів у вигляді однієї таблиці.
Опис
Оскільки реляційні бази даних не підтримують спадкування, потрібно придумати спосіб відображення такої ієрархії в сховищі.
Рішенням буде зберігати всю ієрархію в одній таблиці. Тоді колонками у такій таблиці будуть усі поля всіх класів ієрархії.
Застосування
- У Hibernate (Java) та Entity Framework даний підхід називається Table-Per-Class-Hierarchy та Table-Per-Hierarchy (TPH) відповідно. Колонка яка відповідає за тип об'єкту називається дискримінатор (Discriminator).
Переваги та недоліки
Переваги
- У структуру бази додається лише одна таблиця
- Не потрібні JOIN команди для отримання даних, лише WHERE
- Переміщення полів в дочірній чи батьківський клас не вимагає зміни структури таблиці
Недоліки
- Необхідно додати колонку, яка відповідає за тип об'єкта
- Деякі колонки таблиці використовуються лише певними класами ієрархії, що призводить до витрат пам'яті
Реалізація
Нехай дана ієрархія об'єктів.
public class Player { public string Name { get; set; } } class Footballer : Player { public string Club { get; set; } } class Cricketer : Player { public int BattingAverage { get; set; } }
Тоді у сховищі ці об'єкти представлятимуться однією таблицею.
class PlayerTable { // поле необхідне, щоб розрізняти тип в ієрархії public int Type { get; set; } public string Name { get; set; } public string Club { get; set; } public int BattingAverage { get; set; } }
Див. також
Джерела
- Single Table Inheritance
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Nemaye perevirenih versij ciyeyi storinki jmovirno yiyi she ne pereviryali na vidpovidnist pravilam proektu Spadkuvannya zi spilnoyu tabliceyu insha nazva Nasliduvannya z odnoyu tabliceyu angl Single Table Inheritance shablon proyektuvannya yakij proponuye zberigati iyerarhiyu nasliduvannya klasiv u viglyadi odniyeyi tablici OpisOskilki relyacijni bazi danih ne pidtrimuyut spadkuvannya potribno pridumati sposib vidobrazhennya takoyi iyerarhiyi v shovishi Rishennyam bude zberigati vsyu iyerarhiyu v odnij tablici Todi kolonkami u takij tablici budut usi polya vsih klasiv iyerarhiyi ZastosuvannyaU Hibernate Java ta Entity Framework danij pidhid nazivayetsya Table Per Class Hierarchy ta Table Per Hierarchy TPH vidpovidno Kolonka yaka vidpovidaye za tip ob yektu nazivayetsya diskriminator Discriminator Perevagi ta nedolikiPerevagi U strukturu bazi dodayetsya lishe odna tablicya Ne potribni JOIN komandi dlya otrimannya danih lishe WHERE Peremishennya poliv v dochirnij chi batkivskij klas ne vimagaye zmini strukturi tablici Nedoliki Neobhidno dodati kolonku yaka vidpovidaye za tip ob yekta Deyaki kolonki tablici vikoristovuyutsya lishe pevnimi klasami iyerarhiyi sho prizvodit do vitrat pam yatiRealizaciyaNehaj dana iyerarhiya ob yektiv public class Player public string Name get set class Footballer Player public string Club get set class Cricketer Player public int BattingAverage get set Todi u shovishi ci ob yekti predstavlyatimutsya odniyeyu tabliceyu class PlayerTable pole neobhidne shob rozriznyati tip v iyerarhiyi public int Type get set public string Name get set public string Club get set public int BattingAverage get set Div takozhUspadkuvannya programuvannya Nasliduvannya z tabliceyu dlya kozhnogo klasu Nasliduvannya z tabliceyu dlya kozhnogo konkretnogo klasuDzherelaSingle Table Inheritance