Различные типы наследования в одной и той же схеме

Я использую Doctrine 1.2 в проекте symfony и рассматриваю возможность смешивания конкретных типов наследования и типов агрегации столбцов в моей схеме: агрегация столбцов позволяет мне запрашивать родительскую таблицу и получать как родительские, так и дочерние записи, в то время как конкретное наследование позволяет мне получать более чистая схема. Кроме того, смесь будет находиться в одной цепочке наследования. Как мне написать файл схемы? Нравится следующее?

A:

B:
  inheritance:
    extends: A
    type: concrete

C:
  inheritance:
    extends: B
    type: column_aggregation
    keyField:         type
    keyValue:         1

Или, возможно, вот так:

A:

B:
  inheritance:
    extends: A
    type: concrete

C:
  inheritance:
    extends: B
    type: concrete
D:
  inheritance:
    extends: C
    type: column_aggregation
    keyField:         type
    keyValue:         1


E:
  inheritance:
    extends: C
    type: column_aggregation
    keyField:         type
    keyValue:         2

Есть ли какие-либо опасности/предостережения?


person greg0ire    schedule 13.01.2011    source источник
comment
Похоже, больше ни у кого нет опыта, которым можно поделиться. Мне было бы интересно узнать, как это все прошло - моя первоначальная мысль заключалась в том, что это не сработает.   -  person benlumley    schedule 14.01.2011
comment
@benlumley Что ж, мы попробовали это, и мы тестируем, и, похоже, на данный момент это работает довольно хорошо. Я отредактирую свой пост и добавлю комментарий, если мы столкнемся с некоторыми проблемами. Мы пробовали со второй версией схемы.   -  person greg0ire    schedule 14.01.2011
comment
@ greg0ire: ОСТЕРЕГАЙТЕСЬ отношений, когда речь идет о конкретном наследовании :-) Убедитесь, что вы не определяете их в базовой таблице. Я никогда не смешивал и не сочетал в какой-либо степени, поэтому мне будет неинтересно услышать о любой проблеме, с которой вы столкнетесь ...   -  person prodigitalson    schedule 17.01.2011
comment
@prodigitalson: не могли бы вы уточнить? Почему именно наследование отношения опасно? Из-за иностранных псевдонимов. Я буду публиковать здесь любую проблему, с которой сталкиваюсь (включая эту, если она есть).   -  person greg0ire    schedule 17.01.2011
comment
@greg0ire: потому что при конкретном наследовании базовая таблица (A) создается, но не используется. Если у вас есть внешние ключи, указывающие на A, проверка ключа завершится ошибкой, потому что данные фактически хранятся в B. Пока вы сохраняете свои отношения в таблицах агрегации, вы должны быть в порядке. Но в некоторых случаях это противоречит цели наличия A для начала.   -  person prodigitalson    schedule 17.01.2011
comment
@prodigitalson: Спасибо за это разъяснение. Мы знали, что не можем получить все объекты подтипа из таблицы родительских типов с конкретным наследованием, но мы не думали об этой проблеме отношения. К счастью, у нас нет отношений на родительской таблице, так что все в порядке.   -  person greg0ire    schedule 17.01.2011


Ответы (1)


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

циклическое наследование (очевидно, выглядит следующим образом

Класс A расширяет B Класс B расширяет A

OR

КЛАСС А РАСШИРЯЕТ С

КЛАСС B РАСШИРЯЕТ A

КЛАСС C РАСШИРЯЕТ A

Ромбовидная форма наследования немного более круглая. Это происходит, когда возникает следующий тип состояния

КЛАСС А

КЛАСС B РАСШИРЯЕТ A

КЛАСС C РАСШИРЯЕТ A

КЛАСС D РАСШИРЯЕТ B, C

person footy    schedule 29.04.2011
comment
Вы говорите, что множественное наследование возможно с доктриной? Поскольку это не с php, я сомневаюсь... +1 за словарь, хотя - person greg0ire; 30.04.2011
comment
Все, что я пытаюсь сказать, пока этих ограничений нет. Мы можем смело делать наследование. - person footy; 30.04.2011