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

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

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


person SpaceGhost    schedule 20.05.2011    source источник


Ответы (2)


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

person Gerry    schedule 20.05.2011
comment
Кроме того, еще одна ссылка, на которую меня привела ваша ссылка, была peterhamilton.github.com/citier, в которой много ссылки на блог об этом. Спасибо. - person SpaceGhost; 20.05.2011
comment
@SpaceGhost Здесь нет сайта GitHub Pages. - person Amitābha; 14.08.2015

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

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

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

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

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

person unflores    schedule 24.01.2018