Наслідування з таблицею для кожного класу (англ. 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.]
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, 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 Nasliduvannya z tabliceyu dlya kozhnogo klasu angl Class Table Inheritance shablon proyektuvannya yakij proponuye zberigati iyerarhiyu nasliduvannya klasiv v okremih tablicyah OpisOskilki relyacijni bazi danih ne pidtrimuyut nasliduvannya potribno pridumati sposib vidobrazhennya takoyi iyerarhiyi v shovishi Odnim iz rishen bude zberigati kozhnij klas v okremij tablici Todi kolonkami u takih tablicyah budut lishe neobhidni polya klasiv iyerarhiyi ZastosuvannyaV Entity Framework danij pidhid nazivayetsya Table Per Type TPT Perevagi ta nedolikiPerevagi Tablici ne zajmayut zajvoyi pam yati oskilki zberigayut lishe opisani polya Zv yazok mizh modellyu i shemoyu bazi danih prostij i zrozumilij Zmini u batkivskih klasah ne vplivayut na strukturi tablic spadkoyemciv Nedoliki Zavantazhennya ob yekta vimagaye zapitu odrazu do kilkoh tablic Peremishennya poliv v dochirnij chi batkivskij klas vimagaye zmini strukturi tablic Tablici batkivskih klasiv stayut vuzkim miscem usi zapiti yih vikoristovuyut Neobhidna sinhronizaciya znachen mizh tablicyamiRealizaciyaobramlennya Nehaj 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 tablicyami yaki mistitimut lishe neobhidni polya 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 Div takozhUspadkuvannya programuvannya Nasliduvannya z odniyeyu tabliceyu Nasliduvannya z tabliceyu dlya kozhnogo konkretnogo klasuDzherelaClass Table Inheritance Arhivovano 12 listopada 2020 u Wayback Machine