Наследование отдельных таблиц или наследование таблицы классов?

Я читаю о Наследовании Класса Класса (CTI) и нахожу, что я предпочитаю его в целом. Вопрос, который у меня есть, есть ли какой-либо конкретный прецедент для однонаправленного наследования (STI), где вы использовали бы это по CTI?

Я читаю http://rhnh.net/2010/07/02/3-reasons-why-you-should-not-use-single-table-inheritance, и, насколько я знаю, он прочен. Вариант использования для ИППП представляет собой разницу в поведении, но не данные.

Ответ 1

Я хотел бы указать вам на отличную статью, которую я нашел, которая объясняет с ясностью, почему и когда использовать CTI. ССЫЛКА

Ответ 2

Используйте STI для различий в поведении, как вы сказали. Например, я бы использовал:

У вас есть покупка, и у вас есть PartialPurchase, единственная разница с данными заключается в том, что когда PartialPurchase завершена, она получает отношение к вновь созданной Покупке.

Таким образом, поведение отличается, также есть случаи, когда я хотел бы, чтобы PartialPurchase и Purchase отображались в одном запросе. Для коммерческого агента они хотят видеть все свои покупки и частичные покупки одновременно, поэтому имеет смысл, чтобы эти данные были в одной таблице. В противном случае все атрибуты одинаковы для каждой модели.

В этом случае я бы использовал STI над CTI.

Хотя если бы данные стали сильно отличаться, я бы, вероятно, создал еще одну таблицу, относящуюся к таблице STI, а в случае многих разных полей я, вероятно, подумал бы о CTI.