Настройка полиморфных ассоциаций в БД, когда супер является FK подклассов? - PullRequest
0 голосов
/ 01 октября 2009

При использовании наследования таблиц классов рекомендуется , чтобы подкласс ссылался на суперкласс, а не наоборот. Обычно в Rails полиморфные ассоциации работают в другом направлении - супер относится к подклассу.

Рекомендуется

vehicle
  .id

car
  .vehicle_id # PK instead of using id (identity column)

boat
  .vehicle_id

Типичная Рельсовая полиморфная ассоциация

vehicle
  .id
  .subclass_type
  .subclass_id

car
  .id

boat
  .id

Что мне нравится в рекомендуемом подходе, так это то, что я могу покончить с наличием несовпадающих ключей. То есть данный автомобиль и его транспортное средство имеют один и тот же идентификатор.

В моем конкретном случае я потенциально буду поддерживать множественное наследование, и, например, у меня может быть гибридный автомобиль-катер.

Вопросы:

  • Как бы вы настроили ассоциации ActiveRecord ...

    • Если транспортное средство может иметь только один подкласс?

    • Если транспортное средство может иметь много подклассов? (Проблема, которую я вижу здесь, заключается в том, что, не указав конкретный тип subclass_type, как ассоциации узнают, какую таблицу нужно выбрать. Я не думаю, что они будут и поэтому должны были бы попасть во все возможные таблицы. Поэтому, возможно, таблица пересечения поможет здесь. )

  • Является ли это хорошим шаблоном проектирования для использования с ActiveRecord, или он достаточно уступает Rails, чтобы его не было?

1 Ответ

0 голосов
/ 04 октября 2009

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

...