Самый простой вариант - сделать на продукционных правилах, т.е. правилах ЕСЛИ-ТО. Тогда схема для БД будет примерно такая:
Код:
CREATE TABLE RULE
(
ID INTEGER PRIMARY KEY,
NAME VARCHAR(100)
);
CREATE TABLE IFCLAUSE
(
ID INTEGER PRIMARY KEY,
RULE_ID INTEGER REFERENCE RULE(ID),
QUESTION VARCHAR(255),
VAR_NAME : VARCHAR(100)
);
CREATE TABLE THENCLAUSE
(
ID INTEGER PRIMARY KEY,
RULE_ID INTEGER REFERENCE RULE(ID),
VAR_NAME VARCHAR(100),
VAR_VALUE VARCHAR(100)
);
Работает примерно так.
Выбираешь правило (можно любое). Начинаешь анализировать IFCLAUSE. Если переменная в IFCLAUSE есть где-нить в THENCLAUSE, то начинаешь обрабатывть соотв. правило. Если такой ситуации нет, то задаешь вопрос пользователю. Ну и так, пока причина не будет найдена.
ЗЫ. Хотя тут релационная БД в общем не пришей кобыле хвост. Только как хранилище базы и то, не самое удобное.