Я знаю, что в Stackoverflow есть похожие вопросы, но я не чувствую, что они отвечают на следующее.
График Базы данных в моем понимании хранят данные, следуя главным образом этой схеме:
Table/Collection 1: store nodes with UID
Table/Collection 2: store relations referencing nodes via UID
Это позволяет хранить произвольные типы графиков. Теперь, поскольку я понимаю, что в трех магазинах нет ничего, кроме троек:
Triple/Collection 1: store triples (2 nodes, 1 relation)
Теперь я бы увидел следующее различие в отношении случаев использования:
- График Базы данных: когда вы знаете, статические соединения
- Тройные магазины: когда у вас слабо связаны узлы и вы часто ищете новые соединения
Меня смущает тот факт, что люди, похоже, не обсуждают, какой из них следует использовать в соответствии с этими критериями. Большинство статей, которые я нахожу, говорят о таких аргументах, как скорость или совместимость. Но разве это не самый важный момент?
Поверните в другую сторону:
- Представьте, что у вас есть четко связанный, определенный пользователем график. Почему бы вам захотеть сохранить это только в тройках, потеряв всю информацию о связях? Или нужно реализовать некоторые пользовательские решения, хранящие идентификаторы в тройной
subject
. - Представьте, что вы свободно собирали узлы, которые хотите запросить для неизвестных отношений, используя SPARQL. Графические базы данных поддерживают это. Но для этого им нужно построить еще один индекс, который я предполагаю и будет медленнее?
EDIT: Я вижу, что "потеря информации о связях" - это неправильный способ ее поместить. Если вы сделаете так, как показано в принятом ответе, и вставьте несколько троек для 2 узлов + 1 отношение, вы сохраните всю информацию и, в частности, информацию о том, какие точные узлы подключены.