Используя Rails (5.2.3) и Postgres (9.6.6), я планирую новую модель для большой таблицы (~ 20 миллионов строк и подсчет, изначально).
Я пытаюсьрешить, использовать ли наследование одной таблицы (STI) или нет. Интересно, какие последствия для производительности могут или не могут быть.
Разумное обоснование использования STI, конечно же, заключается в том, что в каждом дочернем классе можно определить собственную логику / методы, которые будут относиться только к нему.
(Надеюсь, будет полезно использовать enum для хранения целых чисел в столбце type
, что бы это ни стоило.)
Вот как я представляю вещи с помощью STI:
class Vehicle < ApplicationRecord
self.inheritance_column = "make"
enum make: {
acura: 0,
benz: 1,
# ...
volvo: 27,
}
enum body_style: {
coupe: 0,
hatchback: 1,
sedan: 2,
}
end
class Acura < Vehicle
end
# get Acura sedans since 2007
Acura.sedan.where("year >= ?", 2007)
Вот как я представляю вещи без ИППП:
class Vehicle < ApplicationRecord
enum make: {
acura: 0,
benz: 1,
# ...
volvo: 27,
}
enum body_style: {
coupe: 0,
hatchback: 1,
sedan: 2,
}
end
# get Acura sedans since 2007
Vehicle.acura.sedan.where("year >= ?", 2007)
Являются ли они полностью эквивалентными с точки зрения производительности? Если нет, то что я пропускаю?