Автор статьи о ДОБД в википедии уподобил документоориентированную БД лесу, в котором деревья покрываются сучьями, а те обрастают листиками.
Странно, что он использовал термин "коллекции", а не "гербарии".
При этом автор смешал такие понятия, как ДОБД и реализованный в MongoDB NoSQL, хотя ДОБД появились в прошлом веке,
когда монго еще висел на пальме в виде фрукта, а пользователи наслаждались цветочками Лотуса по $100 за штуку.
Ныне покойный Lotus Notes конечно SQL'ем не назовешь, но никаких листиков на сучьях там не было.
Мы положили в основу документоориентированной БД множество несвязанных SQL-таблиц (журналов)
и доменный принцип построения системы:
просто, понятно, гибко,
легко описывается, легко администрируется, легко масштабируется.
Чтобы не путать с интернетом, домен пишем слева направо:
RF.TVR.MF - министерство финансов Тверской области РФ.
RF.TVR.MO - министерство образования Тверской области РФ.
Алиас журнала формируется из домена, префикса журнала и года:
RF.TVR.MF/DP_2014 - журнал "Входящие 2014" Минфина ТО
Имя SQL-таблицы формируется из алиаса: RF_TVR_MF_DP_2014
Ссылки на документы состоят из алиаса журнала и UNID'а документа:
RF.TVR.MF/DP_2014&BABAD9A62B0B5A1016627D7FC005F176
Объекту не важно, на какой SQL-сервер указывает ссылка. Он хранит алиас журнала и UNID, а дальше не его проблемы.
Сервер приложения должен по алиасу определить, с каким SQL-сервером нужно установить коннекцию, затем должен вытянуть из нужной таблицы объект и вызвать соответствующий обработчик.
Выглядит это примерно так:
...
# doc - исходный объект, многозначное поле links содержит ссылки
if doc.links: # проверяем, есть ли непустое поле со ссылками
link = doc.A('links')[0] # берем первую ссылку
dbAlias, unid = link.split('&') # расщепить ссылку на алиас и UNID
db = getDB(dbAlias) # установить коннекцию к журналу
linkedDoc = db.getDocumentByUNID(unid) # загрузить связанный документ
...