Как организовать обработку БД конкретного вида?

Есть две базы данных, в пределе представляющие 2 таблицы: таблица объектов и таблица подобъектов.

Таблица объектов имеет примерно такой вид (без учёта обязательности некоторых категорий для объекта (см. п. 5)):

Вид таблицы объектов

  1. В таблице некоторое количество объектов.
  2. Все объекты имеют определённое value. value[0] - основное, value[.1] - дополнительное.
  3. Объектам соотносятся категории напрямую дочерних подобъектов.
  4. У разных объектов может быть разное количество разных категорий подобъектов.
  5. В каждой категории у каждого объекта есть некоторое количество различных подобъектов.
  6. Некоторые категории подобъектов могут быть обязательны для объекта. (Значит, один подобъект из такой категории должен быть связан с объектом)
  7. Прочие категории опциональны для объекта.

Таблица подобъектов имеет примерно такой вид (без учёта обязательности некоторых подобъектов (см. п. 10) или категорий для подобъекта (см. п. 6) и наличия возможных конфликтов между подобъектами разных категорий(см. п. 8)):

Вид таблицы подобъектов

  1. В таблице представлены все подобъекты, которые могут быть связаны с объектами напрямую или через другие подобъекты.
  2. Все подобъекты имеют определённое Δvalue. Δvalue[0] - основное, Δvalue[.1] - дополнительное. Они могут принимать и положительные, и нулевые, и отрицательные значения.
  3. Все подобъекты имеют некоторые Parameters. Пользователь вводит IndicativeParameters. Если подобъект имеет хотя бы один Parameters[n], такой, что 0 < Parameters[n] <= IndicativeParameters[n], подобъект может быть использован программой.(т.е., если IndicativeParameters[.3] = 6, то подобъект a1 из таблицы выше не подойдёт)
  4. Подобъектам соотносятся различное количество некоторых категорий напрямую дочерних подобъектов.
  5. Некоторые подобъекты не имеют категорий дочерних подобъектов, т.е. являются листами.
  6. Некоторые категории подобъектов могут быть обязательны для подобъекта. Значит, один подобъект из такой категории должен быть связан с подобъектом.
  7. Прочие категории опциональны для подобъекта.
  8. Некоторые подобъект(ы) из одной категории могут конфликтовать с подобъектами из другой категории, и не должны быть вместе в результате работы программы.
  9. В результирующем дереве не может быть дубликатов одного подобъекта.
  10. Для некоторых подобъектов(не категорий) может быть установлена обязательность.

Т.о., пользователь выбирает объект, IndicativeParameters, обязательные категории или подобъекты. Программа для объекта M должна выбирать в N категориях подобъекты. Внутри каждой категории выбирается подобъект y1(с учётом дочерних) или y2(с учётом дочерних) или ... или yX(с учётом дочерних), где предпочтения отдаётся варианту с наибольшим результирующим value[0], а в случае равенства между двумя вариантами - с наибольшим value[.1]. Конфликты между подобъектами из разных категорий это, например, выбор между c1(с учётом дочерних) или h4(с учётом дочерних). Разрешаться конфликты должны или обязательностью какого-либо подобъекта/категории подобъектов, или наибольшим результирующим value.

Я понимаю, что это должен быть некий граф, и проходить по нему программа должна как-то так: граф

Цель программы: найти древо объект-подообъекты с максимальным результирующим Value, учитывая указанные выше ограничения. Вывести это Value и древо в некоторой читабельной для человека форме.

Мой вопрос: как правильно организовать форму баз данных и какую библиотеку использовать для максимально простой реализации программы (в т.ч., чтобы по библиотеке была нормальная документация, хватало примеров).


Ответы (0 шт):