Настройка полиморфных ассоциаций в БД, когда super является FK подклассов?

StackOverflow https://stackoverflow.com/questions/1505269

Вопрос

Используя наследование таблицы классов, это Рекомендуемые что подкласс относится к суперклассу, а не наоборот.Обычно в 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 или он настолько перегибает рельсы, что нам следует избегать его?

Это было полезно?

Решение

Я выбрал самое простое решение:используя полиморфную ассоциацию (как показано во втором блоке).Он будет иметь лучшую производительность и будет более ремонтопригоден.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top