2015-10-12 2 views
0

Я экспериментирую с OrientDB, и я хотел бы моделировать не дизъюнктивное наследование. Например: - есть Лицо - a Студент - лицо - Рабочий - это лицо - «Альберто» является одновременно студентом и работником. Можно ли моделировать эту ситуацию только с тремя классами, которые я определил (Студент, Работник, Лицо), или я должен представить новый класс WorkStudent, расширяющий как Работника, так и Студента, содержащий «Альберто»?OrientDB: Можно ли определить вершину, являющуюся экземпляром нескольких классов?

Я полагаю, что вершина не может быть экземпляром более одного класса, так как система не знает, в какой кластер ее помещать, но я еще не нашел явного ответа на мой вопрос.

Приветствия,

Альберто (рабочий студент :-))

ответ

1

Я думаю, вы можете попытаться решить это неправильно. Например, Альберто, по-видимому, всегда будет Личностью. Но когда Альберто заканчивает учебу, он больше не будет Студентом. Фактически, он мог бы также потерять работу и больше не быть Рабочим. Перемещение его из одного класса в другой является серьезной проблемой.

Я бы создал отдельные небольшие узлы Работника и Студента. Затем создайте края от Person to Worker или Person to Student. Кромку можно назвать «Is A».

Теперь очень легко добавить новые категории, например «Родитель» или «Супруг», без необходимости беспокоиться об изменении наследования класса.

Одно из фантастических преимуществ базы данных графиков ...

+0

Я вижу вашу точку, @ silverfox1948. Благодарю. Однако, как и я, я не могу навязывать какие-либо ограничения на уровне схемы, например, я бы не смог наложить на то, что у работника должна быть зарплата. Очевидно, это только пример, который я придумал. В реальной базе данных я строю член родительского класса может иметь несколько дочерних классов, но не могу их изменить. – Alberto

+0

На самом деле, если «Рабочий» - это узел (вершина), тогда можно создать ограничения на свойства узла. Свойство может иметь ограничение «Обязательный» - это означает, что оно требуется вместе с минимальными/максимальными значениями. – silverfox1948

+0

Я настоятельно рекомендую вам НЕ использовать наследование для решения проблем категоризации. Работник/Студент и т. Д. - это просто временные, неисключительные категории. Если вы добавите другую категорию, ваши требования наследования будут взрываться экспоненциально. Просто попробуйте добавить еще одну категорию и посмотреть, сколько дочерних классов вы должны создать, чтобы позволить человеку классифицироваться в одной из новых возможных комбинаций. – silverfox1948

1

в OrientDb вершина может быть экземпляром класса многократным. Используйте эту команду

create class WorkingStudent extends Working,Student 

С наилучшими пожеланиями.

+0

Здравствуйте, Алессандро, спасибо за ваш ответ. Я действительно задавался вопросом, можно ли смоделировать работающего студента, не создавая новый класс. В neo4j я бы написал что-то вроде: 'CREATE (alberto: Student: Worker: Person {name:" alberto "})' – Alberto

+1

нет, вы не можете этого сделать. В Neo4j у вас есть только метки, в то время как в OrientDB у вас есть иерархии классов, полиморфизм и все остальное, поэтому вам нужно определить иерархии классов в схеме базы данных –

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