Как организовать обработку БД конкретного вида?
Есть две базы данных, в пределе представляющие 2 таблицы: таблица объектов и таблица подобъектов.
Таблица объектов имеет примерно такой вид (без учёта обязательности некоторых категорий для объекта (см. п. 5)):
- В таблице некоторое количество объектов.
- Все объекты имеют определённое value. value[0] - основное, value[.1] - дополнительное.
- Объектам соотносятся категории напрямую дочерних подобъектов.
- У разных объектов может быть разное количество разных категорий подобъектов.
- В каждой категории у каждого объекта есть некоторое количество различных подобъектов.
- Некоторые категории подобъектов могут быть обязательны для объекта. (Значит, один подобъект из такой категории должен быть связан с объектом)
- Прочие категории опциональны для объекта.
Таблица подобъектов имеет примерно такой вид (без учёта обязательности некоторых подобъектов (см. п. 10) или категорий для подобъекта (см. п. 6) и наличия возможных конфликтов между подобъектами разных категорий(см. п. 8)):
- В таблице представлены все подобъекты, которые могут быть связаны с объектами напрямую или через другие подобъекты.
- Все подобъекты имеют определённое Δvalue. Δvalue[0] - основное, Δvalue[.1] - дополнительное. Они могут принимать и положительные, и нулевые, и отрицательные значения.
- Все подобъекты имеют некоторые Parameters. Пользователь вводит IndicativeParameters. Если подобъект имеет хотя бы один Parameters[n], такой, что 0 < Parameters[n] <= IndicativeParameters[n], подобъект может быть использован программой.(т.е., если IndicativeParameters[.3] = 6, то подобъект a1 из таблицы выше не подойдёт)
- Подобъектам соотносятся различное количество некоторых категорий напрямую дочерних подобъектов.
- Некоторые подобъекты не имеют категорий дочерних подобъектов, т.е. являются листами.
- Некоторые категории подобъектов могут быть обязательны для подобъекта. Значит, один подобъект из такой категории должен быть связан с подобъектом.
- Прочие категории опциональны для подобъекта.
- Некоторые подобъект(ы) из одной категории могут конфликтовать с подобъектами из другой категории, и не должны быть вместе в результате работы программы.
- В результирующем дереве не может быть дубликатов одного подобъекта.
- Для некоторых подобъектов(не категорий) может быть установлена обязательность.
Т.о., пользователь выбирает объект, IndicativeParameters, обязательные категории или подобъекты. Программа для объекта M должна выбирать в N категориях подобъекты. Внутри каждой категории выбирается подобъект y1(с учётом дочерних) или y2(с учётом дочерних) или ... или yX(с учётом дочерних), где предпочтения отдаётся варианту с наибольшим результирующим value[0], а в случае равенства между двумя вариантами - с наибольшим value[.1]. Конфликты между подобъектами из разных категорий это, например, выбор между c1(с учётом дочерних) или h4(с учётом дочерних). Разрешаться конфликты должны или обязательностью какого-либо подобъекта/категории подобъектов, или наибольшим результирующим value.
Я понимаю, что это должен быть некий граф, и проходить по нему программа должна как-то так: граф
Цель программы: найти древо объект-подообъекты с максимальным результирующим Value, учитывая указанные выше ограничения. Вывести это Value и древо в некоторой читабельной для человека форме.
Мой вопрос: как правильно организовать форму баз данных и какую библиотеку использовать для максимально простой реализации программы (в т.ч., чтобы по библиотеке была нормальная документация, хватало примеров).

