Есть ли встроенные средства СУБД для эффективной работы с наследованием таблиц?
Всех приветствую. Читаю Фаулера, параллельно наткнулся на форуме на обсуждения, и тоже заинтересовался. Фаулер описывает "объектно-реляционные" типовые решения.
Есть 5 вариантов как можно хранить данные в РБД, "которые сильно объектно-ориентированы" (например в Каталоге инструментов, или авто-запчастей)
1. Single Table Inheritance (одна таблица, все атрибуты ВСЕХ типов в ней)
2. Concrete Table Inheritance (таблица ДЛЯ КАЖДОГО типа объекта, в каждой таблице дублируются ОБЩИЕ атрибуты ВСЕХ типов)
3. Class Table Inheritance (это наследование в ООП стиле. Таблицы напоминают ООП-классы. Общие поля выделяются в БАЗОВУЮ таблицу.)
4. EAV (Entity-Attribute-Value)
5. NoSQL (XML, JSON, SerializedLOB)
--
Каждый из этих вариантов имеет право на жизнь. Все будет зависить от БОЛЬШОГО кол-ва нюансов. (3,4 яв-ся по сути "костылями")
Мой вопрос по паттерну 3. На КАЖДОМ уровне иерархии наследования нужно делать подзапрос(т.к. часто мы не знаем к какому ТИПУ/ТИПАМ относится объект хранящийся в БАЗОВОЙ таблице), чтобы узнать с какой таблицей(цами) нужно джойнит-ся. Соответственно вопрос: существуют ли какие-то средства в САМОЙ СУБД (интересует MySQL, но и про другие интересно), чтобы можно было работать с этим паттерном более Эффективно и Изящно?
(И такой же вопрос только по паттерну 4 EAV. Там мы тоже(как пишет Б.Карвин) по сути имеем "систему внутри системы".)