Я написал (не готовый к производству) начало ORM, которое будет делать именно то, что вы ищете некоторое время назад.Просто чтобы у меня было доказательство концепции.Все мои исследования привели к тому, что вы в некотором роде смешиваете код и данные (информацию о подклассе в таблице ликвора).
Итак, вы можете написать метод для вашего класса / класса класса ликера, который запрашивает егособственный стол.Лучший способ избавиться от , не требующего жесткого кодирования всех подклассов в вашем классе , - это иметь столбец, содержащий имя класса подкласса.
Как выраспространять детали вокруг полностью зависит от вас.Я думаю, что наиболее нормализованный (и любой может исправить меня, если я здесь не прав) способ сделать это - сохранить все поля, которые отображаются в вашем классе ликвора, в таблице ликеров.Затем для каждого подкласса есть таблица, в которой хранятся конкретные данные, относящиеся к типу подкласса.В какой момент вы смешиваете код и данные, потому что ваш код читает таблицу ликера, чтобы получить имя подкласса для выполнения соединения.
Я буду использовать автомобили и мотоциклы, а некоторые минимальные, но покатривиальные различия между ними для моего примера:
Ride
----
id
name
type
(1, 'Sebring', 'Car')
(2, 'My Bike', 'Bicycle')
Bicycle
-------
id
bike_chain_length
(2, '2 feet')
Car
---
id
engine_size
(1, '6 cylinders')
Здесь и далее возможны различные варианты, такие как хранение всех данных класса ликвора в таблице подклассов и только хранение ссылок и имен подклассов в таблице ликера.Мне это нравится меньше всего, потому что, если вы агрегируете общие данные, это избавляет вас от необходимости запрашивать в каждой таблице подкласса общие поля.
Надеюсь, это поможет!