ориентированный граф.
в бд проще всего хранить в виде списка смежностей
id вершины из который выходит ребро - id вершины в которую ребро приходит.
любую дополнительную информацию о вершинах хранить в другой таблице/таблицах (в зависимости от структуры этой информации)
ince, в данном случае программировать нужно. Я по умолчанию имел ввиду язык C++ и библиотеки для работы с графами. Но такие библиотеки есть для любого языка программирования. Историю изменений можно хранить в рёбрах и вершинах.