Наследование отдельных таблиц или наследование таблиц классов? - PullRequest
11 голосов
/ 20 мая 2011

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

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

Ответы [ 2 ]

7 голосов
/ 20 мая 2011

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

0 голосов
/ 25 января 2018

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

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

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

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

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

...