2009-03-31 4 views
1

У меня есть ситуация, использующая наследование таблицы классов, где базовый объект (который является абстрактным) расширяется конкретными типами объекта.Как справиться с «иногда» наследованием?

Например, Person -> Пользователь -> Проспект

Однако, в некоторых случаях, как с проспектом, иногда распространяется пользователя, а иногда нет. Я не могу отменить отношения, потому что User! == Prospect, поэтому мне интересно, как лучше всего справляться с такими сценариями, где объект иногда распространяется, а иногда нет.

Кроме того, я знаю, что в этом случае кто-то предложит композицию над наследованием, но это действительно невозможно, потому что я полагаюсь на возможность расширения родительских функций, а свойства-члены заполняются так, что все свойства доступны в точном такой же способ.

ответ

1

Наследование в базе данных, как правило, означает, что primary_key дочерней таблицы является foreign_key для основной_панели родительской таблицы.
Но вы упомянули, что ребенок может стать сиротой. В этом случае родительский объект является необязательным. (Обычно решаются по составу)

Вы можете создать два класса, один из которых является расширенным пользователем, а другой - нет.

(Но это может не подходить для того, что вы пытаетесь сделать)

+0

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

+0

А, я вижу, куда вы идете. Если у Propect есть Пользователь, он должен получить дополнительные свойства и методы от пользователя. Хмммм, сложно ... –

3

Я чувствую запах Decorator Pattern.

+0

Отличный сайт связан. Бонус за конкретный язык. –

Смежные вопросы