Настройка полиморфных ассоциаций в БД, когда super является FK подклассов?
Вопрос
Используя наследование таблицы классов, это Рекомендуемые что подкласс относится к суперклассу, а не наоборот.Обычно в Rails полиморфные ассоциации работают в другом направлении - super ссылается на подкласс.
Рекомендуемые
vehicle
.id
car
.vehicle_id # PK instead of using id (identity column)
boat
.vehicle_id
Типичная полиморфная ассоциация Rails
vehicle
.id
.subclass_type
.subclass_id
car
.id
boat
.id
Что мне нравится в рекомендуемом подходе, так это то, что я могу избавиться от наличия несовпадающих ключей.То есть данный автомобиль и его vehicle super имеют один и тот же идентификатор.
В моем конкретном случае я потенциально буду поддерживать множественное наследование, и поэтому, например, у меня мог бы быть гибрид автомобиля и лодки.
Вопросы:
Как бы вы настроили ассоциации ActiveRecord...
Если бы транспортное средство могло иметь только один подкласс?
Может ли транспортное средство иметь много подклассов?(Проблема, которую я вижу здесь, заключается в том, что, не указывая конкретный subclass_type, как ассоциации узнают, в какую таблицу обращаться.Я не думаю, что они это сделали бы, и поэтому им пришлось бы ударить по всем возможным таблицам.Так что, возможно, здесь помогла бы таблица пересечений.)
Является ли это хорошим шаблоном проектирования для использования с ActiveRecord или он настолько перегибает рельсы, что нам следует избегать его?
Решение
Я выбрал самое простое решение:используя полиморфную ассоциацию (как показано во втором блоке).Он будет иметь лучшую производительность и будет более ремонтопригоден.