Наследование в базе данных документов?

Мне интересно, потому что я искал pdf "[noSql] окончательное руководство" и "начало [noSql]" для слова "наследование", но я ничего не нашел? я что-то упускаю? потому что я выполняю наследование tablePerHierarchy с hibernate и mysql, это почему-то устаревает в [noSql]?

(замените [noSql] на нужную вам базу данных "не только sql" )

Ответы

Ответ 1

Я знаю, что этот ответ немного запоздал, но для MongoDB вы, вероятно, смотрите на что-то немного другое.

Mongo является схематичным, поэтому понятие "tablePerHierarchy" необязательно полезно.

Предположим, что

class A
  property X
  property Y
  property Z

class B inherits from A
  property W

В RDMS у вас, вероятно, будет что-то вроде этого

table A: columns X, Y, Z
table B: columns X, Y, Z, W

Но MongoDB не имеет схемы. Таким образом, вам не нужно структурировать данные таким образом. Вместо этого у вас будет "коллекция", содержащая все объекты (или "документы" ) типа A или B (или C...).

Таким образом, ваша коллекция будет представлять собой серию таких объектов:

{"_id":"1", "X":1, "Y":2, "Z":3}
{"_id":"2", "X":5, "Y":6, "Z":7, "W":6}

Вы заметите, что я храню объекты типа A рядом с объектами типа B. MongoDB делает это очень просто. Просто вытащите документ из коллекции, и он "волшебным образом" имеет все соответствующие поля/свойства.

Однако, если у вас есть "объекты данных" или "сущности", вы можете сделать вашу жизнь проще, добавив тип.

{"_id":"1", "type":"A", "X":1, "Y":2, "Z":3}
{"_id":"2", "type":"B", "X":5, "Y":6, "Z":7, "W":6}

Это упрощает запись класса factory для загрузки ваших объектов.

Ответ 2

Ну, это довольно старый вопрос, но поскольку я оказался здесь, я хотел бы добавить обновление 2017 года.
Если вы используете mongoose для подключения к MongoDb, вы можете проверить discriminators:

Дискриминаторы - это механизм наследования схемы. Они позволяют вам имеют несколько моделей с перекрывающимися схемами поверх того же лежащей в основе коллекции MongoDB.

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