Различные типы наследования в одной и той же схеме - PullRequest
26 голосов
/ 13 января 2011

Я использую 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

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

1 Ответ

1 голос
/ 29 апреля 2011

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

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

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

ИЛИ

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

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

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

A Diamond Образное наследование немного более округлое. Это происходит, когда возникает условие следующего типа

КЛАСС A

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

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

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

...