Показать сообщение отдельно
  #5  
Старый 18.12.2011, 20:48
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Самый простой вариант - сделать на продукционных правилах, т.е. правилах ЕСЛИ-ТО. Тогда схема для БД будет примерно такая:
Код:
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, то начинаешь обрабатывть соотв. правило. Если такой ситуации нет, то задаешь вопрос пользователю. Ну и так, пока причина не будет найдена.

ЗЫ. Хотя тут релационная БД в общем не пришей кобыле хвост. Только как хранилище базы и то, не самое удобное.
Ответить с цитированием