У нас есть система проверки, которая заставляет пользователей выбирать из допустимого набора значений в наборе взаимосвязанных полей.
Пользователь должен заполнить первое значение в списке, и какое бы значение оно не выбрало, оно определяет, какой набор значений он сможет выбрать во втором поле. Их выбор значения во втором поле ограничивает набор вариантов в третьем. И так далее.
Все взаимосвязанные поля организованы в виде древовидной структуры, то есть есть одно корневое поле, с которого пользователь начинает, и есть различные пути вниз по дереву, начиная с корня, например:
Field1
/ \
Field2 Field7
| |
Field3 etc
|
Field4
/ \
Field5 Field6
Способ, который мы выбрали для реализации, использует следующую модель базы данных:
ID
Parent ID
Field Type
Delimited Chain Data
1,null,Field1,F1-1
2, 1,Field2,F1-1|F2-1
3, 1,Field2,F1-1|F2-2
4, 1,Field2,F1-1|F2-3
5, 1,Field2,F1-1|F2-4
6, 2,Field3,F1-1|F2-1|F3-1
7, 2,Field3,F1-1|F2-1|F3-2
8, 3,Field3,F1-1|F2-2|F3-1
9, 3,Field3,F1-1|F2-2|F3-3
etc
Соотношение между значениями данных много-много, например несколько значений в Field3 связаны с несколькими значениями в Field2.
То, что эта структура позволяет вам делать, это две вещи:
- Простой запрос набора значений для определенного поля, предоставление ранее выбранных данных над этим полем.
- Убедитесь, что данный путь в дереве содержит допустимые значения для всех его полей
Однако эта система выросла. Некоторые из этих полей имеют тысячи возможных значений. Всего около 30 полей. Таким образом, когда вы вводите все возможные наборы допустимых значений в дереве, существуют десятки миллионов комбинаций. Система начинает скрипеть по швам, и обслуживание данных наборов значений становится трудным.
Мои вопросы:
- Кто-нибудь сталкивался с похожими проблемами проверки полей? Как ты это решил?
- Существуют ли какие-либо продукты или библиотеки с открытым исходным кодом (предпочтительно на основе Java), которые помогают с подобными проблемами, содержащими такие большие объемы комбинаций?
- Есть ли у кого-нибудь предложения по альтернативным стратегиям реализации?
Спасибо.